![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVPFpXTzsGVPVTV61UMFNDTwYVbiVHNHpleO1GTulzRilWO5x0LcRHelR3LcJzLctmch1mclRXY39TO5YTNzcTN4AjMyMDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
構造函數:
可以new的函數是構造函數
執行個體:
将構造函數new之後得到的就是執行個體,或者o1 = {name:’o1’}這樣的寫法
- 構造函數是可以使用new運算符生成一個執行個體
- 構造函數也是函數,函數具有prototype
- prototype是浏覽器附加上的原型對象
- 原型對象中的構造器constructor就指向到聲明的構造函數
- 執行個體的__proto指向的構造函數的原型對象prototype
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