JavsScript中的原生參考類型,例如Object型,運用了建構子模式嗎?
js是基於原型繼承的語言。創作之初參考scheme以函數為一等公民,參考c語言文法,參考self語言的原型繼承,所以它是三者優點的合集;起初叫livescript,當時java很火,公司就給他換了個名字叫JavaScript,其實他跟java沒半毛錢關係。 原型繼承的優點在於可以多重繼承,可以模擬類,但類語言是永遠無法模擬原型的。這就是JavaScript的靈活之處,可以函數式編程,也可以物件導向編程。
http://www.cnblogs.com/wangfu...
JavaScript中的類別和物件本來就爭議很大,因為其使用的是原型繼承,是透過引用原型鏈上的方法實現的繼承。你所呼叫的物件上的方法,最終都是呼叫的Object.prototype上面的方法。這些方法即使不使用new來進行定義,使用物件字面量的方式進行定義,也是可以進行呼叫的。 也就是如果你修改了Object.prototype上的方法,那麼所有的物件呼叫的該方法都會改變。 JavaScript裡面所有的建構子其實都是用原型繼承的方法fake出來的。即使ES6裡面新加入的class,本質上也是使用原型繼承的方法實現的。所以還是要去深入了解原型繼承到底是怎麼實現的。
Object.prototype
new
class
js是基於原型繼承的語言。創作之初參考scheme以函數為一等公民,參考c語言文法,參考self語言的原型繼承,所以它是三者優點的合集;起初叫livescript,當時java很火,公司就給他換了個名字叫JavaScript,其實他跟java沒半毛錢關係。
原型繼承的優點在於可以多重繼承,可以模擬類,但類語言是永遠無法模擬原型的。這就是JavaScript的靈活之處,可以函數式編程,也可以物件導向編程。
http://www.cnblogs.com/wangfu...
JavaScript中的類別和物件本來就爭議很大,因為其使用的是原型繼承,是透過引用原型鏈上的方法實現的繼承。你所呼叫的物件上的方法,最終都是呼叫的
Object.prototype
上面的方法。這些方法即使不使用new
來進行定義,使用物件字面量的方式進行定義,也是可以進行呼叫的。也就是如果你修改了
Object.prototype
上的方法,那麼所有的物件呼叫的該方法都會改變。 JavaScript裡面所有的建構子其實都是用原型繼承的方法fake出來的。即使ES6裡面新加入的class
,本質上也是使用原型繼承的方法實現的。所以還是要去深入了解原型繼承到底是怎麼實現的。