對原型鏈和原型以及建構函式的驗證

2021-09-14 00:41:53 字數 2010 閱讀 1990

開局先上一張圖、分清楚函式與物件:

得到結論:物件都有_proto_這個屬性,但是只有函式物件才有prototype這個屬性。

得出上面結論後我們再上一張圖、我們對話題研究都是基於這張圖:

根據上圖,自己些**論證一下得出一下結論:

const foo =function(){};

const foo_prototype = foo.prototype;

const f1 = new foo();

foo.prototype == foo.prototype //true

foo_prototype.constructor == foo //true

//1得出結論,foo是乙個函式物件,foo的原型foo_prototype的建構函式就是foo本身

f1.__proto__ == foo.prototype // true

//2得出結論,foo的例項指向f1的原型鏈上乙個節點也就是foo的原型

foo_prototype.__proto__ == object;//true

//3得出結論,foo原型指向foo的上乙個原型節點

const object_prototype = object.prototype;

object_prototype.__proto__ == null//true

//4得出結論,object的原型鏈上乙個節點是null,這也就是萬物皆物件,null中生物件

const function_prototype = function.prototype;

object.__proto__ == function_prototype//true

//5得出結論,原生物件指向function的原型,

function.__proto__ == function_prototype;//true

//6得出結論,function的原型鏈的上乙個節點是function本身

foo.__proto__ == function_prototype//true

//7得出結論,foo的原型鏈上乙個節點指向function

**經過上述**驗證得出如下結論:

1.所有物件都有_proto_這個屬性。

2.所有的原型物件都有constructor屬性,該屬性對應建立所有指向該原型的例項的建構函式。

3.原型鏈的頂端是null。

**4.物件本身的prototype和_proto_毫無關係,_proto_指向原型鏈上乙個節點的原型。

5.function的原型鏈的上乙個節點是function本身(這個很奇怪哎)。**

ok,丟擲乙個問題:

//通常情況下,為了只繼承父函式的原型而不繼承其他靜態方法往往這樣定義

b = function(){};

c = function(){};

b.prototype.say = 1;

c.prototype.say = 2;

function extend(father,son);

def.prototype = father.prototype;

son.prototype = new def();

}extend(b,c)

問題:

1.繼承的時候可以直接使用son.prototype = father.prototype 嗎?

2.為什麼要新建乙個def函式,然後son繼承def的原型來繼承呢?

3.通過1方法和2方法生成的son是一樣的嗎?

javascript原型和原型鏈,建構函式和例項

原型 建構函式 就是工廠,原型的例項就是工廠按照圖紙生成的工具 比如汽車 原型鏈 隱式的 就是生成的工具所具有的功能,而功能是工具的屬性,生成什麼樣的工具是由工廠 建構函式 決定的,圖紙是有工廠和客戶共同決定的 var ca ctory function options this.stop func...

js的原型 原型鏈 建構函式

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

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

建立物件的方法 原型 建構函式 例項 原型鏈的關係 instanceof的原理 new運算子 建立物件的方式 1 字面量 var obj1 var obj2 new object 不是字面量,但結果和字面量等同 2 建構函式 var fn function name var obj3 new fn ...