js的原型 原型鏈 建構函式

2022-03-29 00:37:19 字數 2498 閱讀 7785

js裡一切皆物件。有js自己內部的物件,還有使用者自定義的物件。所有的物件都是從原型上衍生出來的。 原型本身也是物件,原型鏈的最高層就是object。

兩個重要的屬性:prototype, __proto__

所有的物件都有__proto__屬性,通過.__proto__一層一層,最後到達object,object的__proto__是null,這樣就形成了乙個鏈,叫做原型鏈

prototype這個屬性很特殊,只有指定的幾個物件有prototype屬性。常見的有:

使用者自定義變數的查詢順序是按原生鏈從底往上查,如果查到object.prototyp還是沒有的話就返回undefined

以下是別人整理的原型鏈,我是看著有點暈,自己畫了乙個。

原型上的某個屬性改變值的話,會直接影響到所有例項化出的物件的之一屬性。var p = function(){}

p.prototype.a=1;

var man = new p();

console.log(man.a); //1

//只是給prototype的某個屬性賦值的話,所有例項化的物件的對應的這個屬性都會改變

//或者給prototype擴充套件新增了個新屬性,所有例項化的物件也就具備 了這個屬性,這就解釋了原型鏈的查詢。

p.prototype.a =2;

console.log(man.a); //2

//重新給prototype賦值後,之後所例項化出的物件就以新的原型為原型,之前的物件還是以之前的原型為原型,不具備新原型的屬性。

p.prototype=;

console.log(man.a); //2

console.log(man.t); //undefined

var woman = new p();

console.log(woman .a); //undefined

console.log(woman .t); //2

注意下邊,obj2.a.b=0導致obj1.a.b也變成了0。是因為obj2.a訪問的是obj1的引用,即obj2.a===obj1.a為true,所以b屬性是同乙個。  

var obj1=};

var obj2= object.create(obj1);

obj2.a.b=0;

console.log(obj1.a.b)//0

刪除屬性或方法 delete man.name

只能刪除自己的屬性,不能刪除上級原生鏈裡的屬性。

與原生相關的方法:hasownproperty ,isprototypeof,getprototypeof

var a=

var b = object.create(a)

a.isprototypeof(b) //true

a.hasownproperty("b") //true

b.hasownproperty("b") //true

object.getprototypeof(b) === a //true

js實現繼承。 js的繼承其實就是把父親的原型鏈拿給孩子當原型鏈用。下面建立個c,這樣就避免了在不知道super這個function內部做了什麼處理,是不是還要傳參的情況下,直接new super的時候,可能會丟擲異常。c的原型就是super的原型,這樣直接new c()得到的物件的原型就是super.prototype.一般prototype還有乙個constructor屬性,給這個屬性賦值為child這個function。

因為這個是模擬的繼承,所以cat 裡還需要顯示的呼叫一下animal的建構函式來取得animal建構函式裡的屬性,所以我們給child新增了乙個屬性為superclass,存放super的原型。如下,在cat的建構函式裡直接使用 cat.superclass.constructor.call(this,name)就調到了animal的構造方法。如果不需要用animal構造方法裡的屬性,可以不寫這行**。

建構函式

建構函式有別於普通函式的點就是用new去使用它。

var p = function()       

}

如果不用new,直接用p()話,this指的是 window。用new時,this指的是新建的物件 。

所有從p例項化的物件都具有name和showinfo這兩屬性。

js 建構函式和原型鏈

比較new和object.create 建構函式 new 保留原建構函式屬性 object.create 丟失原建構函式屬性 原型鏈new 原建構函式prototype屬性 object.create 原建構函式 物件 本身 作用物件 new function object.create funct...

js關於原型建構函式和原型鏈的理解

js的物件導向方式的函式有很多種方式,其中有兩個比較重要的是兩種方式一是建構函式模式,一是原型模式。1 建構函式模式如 function persion name,age var person1 new person alex 29 person1.sayname alex var person2 ...

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

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