天天看點

JS原型鍊-原型、構造函數、執行個體和原型鍊、instanceof

JS原型鍊-原型、構造函數、執行個體和原型鍊、instanceof

構造函數:

可以new的函數是構造函數

執行個體:

将構造函數new之後得到的就是執行個體,或者o1 = {name:’o1’}這樣的寫法

  • 構造函數是可以使用new運算符生成一個執行個體
  • 構造函數也是函數,函數具有prototype
  • prototype是浏覽器附加上的原型對象
  • 原型對象中的構造器constructor就指向到聲明的構造函數
  • 執行個體的__proto指向的構造函數的原型對象prototype

instanceof

JS原型鍊-原型、構造函數、執行個體和原型鍊、instanceof

instanceof 運算符用來檢測 constructor.prototype 是否存在于參數 object 的原型鍊上。(也就是一直在原型鍊上向上查找)

instanceof 是用來判斷執行個體對象的

__proto__

和構造函數的prototype是不是引用同一個位址

可以用constructor來擷取聲明的構造函數比用instanceof 判斷prototype在原型鍊中是否存在更加嚴謹

var M = function(){this.name = 'o2'};
var o2 = new M();
o2 instanceof M // true
o2 instanceof Object // true
o2.__proto__ === M.prototype // true
M.prototype.__proto__ === Object.prototype // true
o2.__proto__.constructor === M //true
o2.__proto__.constructor === Object // false