前端面試知識點--原型鏈

創建對象有幾種方法

// 第一種方式:字面量
var o1 = {name: 'o1'};
var o2 = new Object({name: 'o2'});
// 第二種方式:構造函數
var M = function (name) { this.name = name; };
var o3 = new M('o3');
// 第三種方式:Object.create
var p = {name: 'p'};
var o4 = Object.create(p);

原型對象、構造函數、實例、原型鏈

原型鏈

  • prototype屬性,它是函數所獨有的,用於由函數指向該函數的原型對象(foo.prototype)。它的含義是函數的原型對象,也就是這個函數(所有函數都可稱爲構造函數)所創建的實例的原型對象;在函數中的這個屬性是一個指針,指向一個對象,這個對象的用途就是包含所有實例共享的屬性和方法(我們把這個對象叫做原型對象);
  • _proto_ 屬性是原型鏈查詢中實際用到的,它總是指向 prototype,換句話說就是指向構造函數的原型對象,它是對象獨有的;(在js中萬物皆對象,因此函數也是對象)
  • constructor屬性是指向創建實例對象的構造函數本身;

instanceof的原理

instanceof原理

instanceof 的原理是通過判斷該對象的原型鏈中是否可以找到該構造類型的 prototype 類型。
判斷實例對象的__proto__屬性和構造函數的prototype屬性是否爲同一個地址引用;

new運算符

  1. 一個新對象被創建,它繼承自foo.prototype;
  2. 構造函數foo被執行。執行的時候,相應的傳參會被傳入,同時上下文(this)會被指定爲這個新實例。new foo等同於new foo(),只能用在不傳遞任何參數的情況;
  3. 如果構造函數返回了一個“對象”,那麼這個對象會取代整個new出來的結果。如果構造函數沒有返回對象,那麼new出來的結果爲步驟1創建的對象;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章