对象的创建方式
- 对象字面量
var obj={
//code...
}
- 构造函数
- 系统自带的构造函数;
比如new Object()、 new Array()、 new Number()、 new Boolean()、 new String()、 new Date()... - 自定义的构造函数
构造函数与普通函数一模一样,为了好维护、好阅读,构造函数首字母大写。
有了构造函数,通过new关键字即可生产出对象
function Student(name,age){
this.name = name;
this.age = age;
}
var alice = new("Alice",18);
构造函数内部原理(前提加了new关键字)
(1)隐式创建this对象;在函数体最前面隐式的加上this = {}
(2)执行this.xxx = xxx;
(3)隐式的返回this对象。
备注:其实隐式创建的this对象并不是空对象,它里面上来就有一个属性__proto__
值为Xxx.prototype,即:
{
__proto__ : Student.prototype;
}
意思是,对象生成的时候,会存在一个属性__proto__
指向自己的原型。当对象找对应的属性的值时,先看看自己有没有,没有的话就去沿着__proto__
指向的原型中查找。所以alice.__proto__=== Student.prototype
是绝对的。
其实还存在第三种创建对象的方式,通过Object.creat(原型),传入的可以是一个对象也可以是null,传入null时,创建的对象没有原型。
var obj = Object.creat(null);
网友评论