原型 建構函式 例項 原型鏈的關係

2021-09-24 07:53:55 字數 2443 閱讀 5228

建立物件的方法

原型、建構函式、例項、原型鏈的關係

instanceof的原理

new運算子

// 建立物件的方式

// (1) 字面量

var obj1 = ;

var obj2 = new object(); // 不是字面量,但結果和字面量等同

// (2) 建構函式

var fn = function(name)

var obj3 = new fn('obj3');

// (3) object.create

var parentobj = ;

var obj4 = object.create(parentobj);

複製**

// 原型、建構函式、例項、原型鏈的關係

// 1、例項 ==> 1. 物件就是乙個例項,就有_proto_屬性

// 2. 例項通過_proto_原型鏈找到prototype原型物件,prototype原型物件的屬性被所有例項共享。

// 2、建構函式 ==> 1.可以通過new運算子生成乙個例項。

// 2.任何函式都可以作為建構函式。

// 3.只要被new運算子使用過的函式就是乙個建構函式

// 3、原型 ==> 1. 函式都有prototype屬性,prototype屬性的值就是乙個初始化的原型物件。

// 2. 原型物件有個constructor和_proto_屬性,constructor是乙個建構函式。

// 3. fn.prototype.constructor === fn // constructor函式指向建構函式本身。通過constructor把原型物件和建構函式關聯。

// 4、原型鏈 ==>1. 物件有_proto_屬性(函式也是物件,所以函式也有_proto_屬性)

// 2. 例項通過_proto_原型鏈找到prototype原型物件,如果找不到,則通過原型物件的_proto_繼續往上找,一直到頂層。

// 5、關係:==> 1. fn.prototype.constructor === fn // 建構函式原型的constructor屬性指向建構函式本身

// 2. obj3.__proto__.constructor === fn

// 3. obj3.__proto__.constructor === fn.prototype.constructor

// 4. obj3.__proto__ === fn.prototype // 修改prototype的屬性, __proto__也會修改,同理也是

複製**

// instanceof ==> 1. 判斷例項物件的__proto__和建構函式的prototype屬性指向同乙個引用位址

(並不能判斷乙個物件是不是乙個建構函式直接生成的例項),

// 2. obj3 instanceof fn // true

// 3. obj3 instanceof object // true,由於 fn instanceof object === true

// 4. 如何準確判斷乙個物件是不是乙個建構函式直接生成的例項物件(通過constructor):

// obj3.__proto__.constructor === fn.prototype.constructor // true

// obj3.__proto__.constructor === object.prototype.constructor // false

複製**

var obj3 = new fn('obj3');

obj3例項物件在建立過程

1. new運算子會先建立乙個新物件,它繼承自fn.prototype。

2. 建構函式fn被執行,相應的引數會被傳入,this會被指向這個新的例項。

3. 在不傳引數時,new fn等同於new fn()

4. 如果fn返回了乙個物件,那麼這個物件會取代new出來的物件。

5. 如果建構函式沒有返回物件,那麼new出來的物件就是最終的結果。

new運算子的工作原理,用**模擬

var newtest = function(fn) else

}var fn = function

() }

newtest(fn)

複製**

自己也是在處在深入學習和理解的階段,如有錯誤之處,請指正。

未完待續。

建構函式 原型物件 原型鏈之間的關係

一 三者的概念 在js中萬物都是物件,每個資料中都有一條屬性叫 proto 這個屬性叫隱式原型,乙個物件中的隱式原型指向構造該物件的建構函式的原型物件prototype。prototype 是原型物件,專屬於函式,作用 為將來創造例項做父級使用,減少記憶體。constructor 指向了當前所在的p...

原型鏈 建構函式 例項 原型物件三者之間的關係

建構函式通過prototype屬性指向原型物件prototype,原型物件prototype通過prototype.constructor指向建構函式。建構函式可以建立出其實例物件 通過new方法 例項物件通過 proto 屬性指向原型物件prototype。由於原型物件protoytpe指向建構函...

js的原型 原型鏈 建構函式

js裡一切皆物件。有js自己內部的物件,還有使用者自定義的物件。所有的物件都是從原型上衍生出來的。原型本身也是物件,原型鏈的最高層就是object。兩個重要的屬性 prototype,proto 所有的物件都有 proto 屬性,通過.proto 一層一層,最後到達object,object的 pr...