1.创建对象的3种方法
// 第一种:字面量
var o1 = {name:'o1'};
var o11 = new Object({name:'o11'});
// 第二种: 通过构造函数
var M = function(){
this.name = 'o2';
}
var o2 = new M();
// 第三种:Object.create()方法
var P = {name:'p'};
var o3 = Object.create(P);
2.原型、构造函数、实例、原型链
3.instanceof的原理
instanceof 用于判断一个对象是否是构造函数的实例。
原理:判断实例对象的__proto__属性和构造函数的prototype属性引用的是否是同一个原型。
var M = function(){
this.name = 'o2';
}
var o2 = new M();
console.log(o2 instanceof M) // true
console.log(o3 instanceof Object) // true
console.log(o3.__proto__ === M.prototype) // true
console.log(M.prototype.__proto__ === Object.prototype) //true
// 通过 constrotor 判断实例对象的直系构造函数
console.log(o3.__proto__.constructor === M); // true
console.log(o3.__proto__.constructor === Object); //false
4.new运算符
// 用一段代码来模拟new的执行过程,func表示构造函数
var new2 = function(func) {
var o = Object.create(func.prototype); //创建一个空对象
var k = func.call(o); //执行构造函数
//判断构造函数的运行结果是不是对象类型
if(typeof k === 'object') {
return k;
} else {
return o;
}
}
//测试
var o6 = new2(M); //创建实例
console.log(o6 instanceof M); // true
console.log(o6 instanceof Object); // true
console.log(o6.__proto__.constructor === M); // true