關於javascript的原型繼承

2021-07-22 18:03:53 字數 1095 閱讀 6354

經常會看到乙個 

array

.prototype.slice.call(arguments);這樣的用法。

對於prototype和call函式難以理解。無意中在一篇部落格中看到這樣一幅圖,頓時明白了許多。

比如說通過function建立了乙個函式person,這個person就是乙個特殊的物件。假設person有name和age屬性。現在通過new操作建立乙個物件

var man=new person("xiaoming",20);

man是乙個物件。而它與person的區別是,person物件有乙個原型屬性prototype,而man物件沒有,prototype屬性指向了乙個prototype物件,同時prototype物件內有乙個constructor屬性,而這個constructor屬性指向乙個constructor物件,而這個物件就是function。

而在man物件中有乙個內建原型屬性,這個屬性與person的原型屬性不同,這個屬性假設稱之為inobj,這個inobj屬性是指向person的prototype物件。所以man就可以去呼叫person物件的屬性和方法了。這就是傳說中的原型繼承。

var man=new person("xiaoming",20);這一句話

其實現的原理分為二步

1.var man={};定義man為乙個物件。

2.person.prototype.call(man,'xiaoming',20); 讓man的內建原型屬性去指向person的prototype屬性的prototype物件,這樣man物件就可以去用person物件的屬性和方法了。

是不是可以理解為:讓arguments物件的內建原型屬性去指向array物件的propotype物件,這樣arguments就有了陣列物件的slice方法。等價於 ---> arguments.slice(0),為什麼不直接用呢,因為arguments在函式傳參的時候不是陣列啊。

推薦一篇理解 

array

.prototype.slice.call(arguments);的部落格

:  寫的挺不錯的

關於javascript物件導向和原型

ecmascript有兩種開發模式 1.函式式 過程化 2.物件導向 oop 物件導向的語言有乙個標誌,那就是類的概念,而通過類可以建立任意多個具有相同屬性和方法的物件。但是,ecmascript沒有類的概念,因此它的物件也與基於類的語言中的物件有所不同。二.建立物件 建立乙個物件,然後給這個物件新...

JavaScript的原型鏈

首先介紹下原型 原型的作用 把方法放到原型中,就可以讓同型別的物件共享 當我建立乙個建構函式。建構函式裡有原型。通過 建構函式名.prototype獲取到當前建構函式的原型。function student name,age,gender this.sayhi function 原型內部自帶乙個co...

JavaScript原型以及原型鏈

原型物件的用途是為每個例項物件儲存共享的方法和屬性,它僅僅是乙個普通物件而已。並且所有的例項是共享同乙個原型物件,因此有別於例項方法或屬性,原型物件僅有乙份。在訪問乙個物件的屬性的時候,首先在當前物件中找,如果沒有在其原型物件找 復用的內容放在prototype,讓類的例項擁有相同的功能 小紅書上的...