// 1.字面量 var o1 = { name: 'o1' }; var o2 = new Object({ name: 'o2' }); // 2.Object.create() var o3 = Object.create({ name: 'o3' }); // 3.构造函数 var M = function () { this.name = 'o3' }; var o4 = new M();
几点说明:函数
工做原理:经过原型链的方式找到原型对象,原型对象的方法和属性会共享;实例没有的属性会向上查找this
判断原理:实例对象的__proto__属性和构造函数的prototype属性是否是引用同一个地址,并且实例对象的constructor必须指向对应构造函数spa
var a = [1, 2, 3]; alert(a instanceof Array); //返回true alert(a instanceof Object); //返回true alert(a.constructor == Array); //返回true alert(a.constructor == Object); //返回false
constructor 更加精确地指向对象所属的类,而对 instanceof 而言,即便是父类也会返回trueprototype
练习:如何判断一个对象是否属于某个类code
if(a instanceof Person){ alert('yes'); }
1.建立一个空对象,而且this变量指向改对象,同时还继承了该构造函数的原型 2.属性和方法被加入到this引用的对象中去 3.最后隐式的返回this对象 var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj);