web.jpeg
对象
-
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









网友评论