JS中的对象基础认知
2019-07-25 本文已影响9人
追逐_chase
web.jpeg
1.2.利用系统的构造函数
3.
对象
-
JavaScript
中的对象和OC
中的字典Dictionary
是一样的,一组“键值对”(key-value
)的集合,并且是一种无序的复合数据集合。
1. 几种 对象的创建方式
1.1 字面量对象
- 用一个
{...}
表示一个对象
,键值对以xxx: xxx
形式申明,用,
隔开。注意,最后一个键值对不需要在末尾加,
,
//创建一个空的对象
var obj = {};
// 创建一个 带有属性值得 对象
var obj4 = {
"name":"tt",
"age":20,
"height":1.70
};
console.log(obj4);
- 可以给对象
动态
的添加属性
var obj = {};
//方式一 设置对象的属性
obj["name"] = "cc";
//方式二 设置对象的属性
obj.age = 18
- 对象
value
值得获取,以上述的obj4
对象为例
// 点语法获取
var getName = obj4.name;
console.log(getName);
// 利用 ["key"]获取
var name1 = obj4["name"];
- 删除对象的属性
delete
//删除name属性
delete obj4.name;
- 检查对象是否包含摸个属性
in
// 返回 true 是有这个属性
console.log("name" in obj);
- 检查一个对象 是否 是一个类的实例
instanceof
,是 返回true
不是 返回false
-
Objec
是所有类的 父类
-
var per = new Object();
per.name = "cc";
per.age = 20;
per.height = 1.70;
console.log(per);
console.log(per instanceof Object);
1.2.利用系统的构造函数 创建对象
-
Object
是系统的构造函数
var obj = new Object();
//添加属性
obj.name = "CC";
obj.age = 18;
//添加方法
obj.paly = functionc(){
console.log("播放开始");
}
1.3.工厂模式创建对象
//创建函数
function creatObject(name,age) {
var obj = new Object();
//设置属性
obj.name = name;
obj.age =age;
//添加方法
obj.fn = function () {
console.log("IT程序员");
};
return obj;
}
//工厂模式创建对象
var obj = creatObject("CC","18",);
console.log(obj.name);
console.log(obj.age);
obj.fn();
1.4.自定义构造函数创建对象
创建的函数 首字母大写
-
构造函数
必须通过new
关键字 调用
//定义构造函数 注意首字母大写
function Person (name,age) {
this.name = name;
this.age = age;
this.sayHi = function () {
console.log("你好,我是:"+this.name,"今年:"+this.age);
};
}
//通过构造函数,创建一个 实例对象
var per = new Person("cc","18");
console.log(per.name);
console.log(per.age);
per.sayHi();
注意: 使用同一个构造函数创建的对象 我们称为
一类对象
,这个对象也称为实例
,这个构造函数其实就是一个类
在创建构造函数时程序做了一下几件事情
1
.开辟内存空间,创建一个新对象
2
.把新创建的对象赋值给this
3
.设置对象的属性和方法
4
.将this
对象 返回
普通函数
和构造函数
的区别?
普通函数
直接调用,构造函数
必须通过new
关键字 调用
New关键字
- 一般
new
关键字 是声明一个新的对象
-
new
运算符的作用是创建一个对象实例
。这个对象可以是用户自定义的
,也可以是带构造函数的一些系统自带的对象。 - 所谓
"构造函数"
,其实就是一个普通函数,但是内部使用了this
变量。对构造函数使用new运算符,就能生成实例,并且this
变量会绑定在实例对象上
。
2.对象的遍历
-
for…in
循环遍历属性
var object1 = {name:"cc",
age:"18",
schrool:"第一高级中学",
height:"1.70",
"weight-haha":"150"
}
for (var i in object1){
console.log(i);
}
//打印:
name
age
schrool
height
weight-haha
3.对象
的数据类型
我们数据分为基本数据类型
和 引用数据类型
3.1基本数据类型
-
Number
数值类型 (值类型
) -
String
字符串类型 (值类型
) -
Boolean
布尔 (值类型
) -
Undefiend
未定义 -
Null
空
image.png值类型的值:栈中存储
- 值类型之间的传递
<script>
var num = 10;
var num1 = num;
//是值拷贝,他们分别在 栈 有空间 num的值拷贝一份 给了 num1
</script>
3.2 引用类型
-
Object
对象
image.png引用类型的值:在栈和堆中存储(
堆中存储对象
,栈
中存储对象的地址
)
引用类型之间的传递是地址
解释: 我们创建的
对象
存储在堆
上, 而我们声明的变量Obj
存储(引用)的是对象的地址
//创建一个对象 在 堆中
// o1变量 引用这个对象
var o1 = {};
var o2 = o1;
//
o1 = 1;
o2 // {}
上面代码中,o1和o2指向同一个对象,然后o1的值变为1,
这时不会对o2产生影响,o2还是指向原来的那个对象。
// 构造函数 类
function Person (name,age) {
this.name = name;
this.age = age;
this.salary = salary;
}
//普通函数
function fun (person) {
//person的指针是0x120
person.name = "ls";
// 创建新的对象,开辟新的空间,原来的指向0x120 取消, 重新指向新的内存空间0x110
person = new Person("aa",18,1000);
}
//创建对象0x120
var p = new Person("zs",18,1000);
console.log(p.name);
//指针传递
fun(p);
console.log(p.name);
//打印的结果: zs, ls
案例图片.jpg