// 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);