首先要理解
建構函式:存在乙個prototype 指向他的原型物件
原型物件其實就是一塊空間,可以是物件的實列
實列:存在乙個[[prototype]] 指向他的建構函式的原型物件一般__proto__表示
new 來建立的實列是開闢乙個新的空間所以是無法共享元素的但是new 的建構函式的 prototype 可以指定到乙個具體的空間然使用這建構函式的所有實列都
可以找到這個空間
當查詢乙個物件的屬性或者方法時,js會向上遍歷他的原型鏈,直到找到給定的屬性名為止,如果沒找到就是undefined
eg:function dog(name)
dog.prototype = ;//這個是可以共享的空間
var doga = new dog('大毛');
var dogb = new dog('二毛');
alert(doga.species); // 犬科
alert(dogb.species); // 犬科
isprototypeof
這個方法用來判斷prototype物件和某個例項之間的關係,例如
alert(dog.prototype.isprototypeof(doga)); //true
hasownproperty
每乙個例項物件都有乙個該方法,用來判斷該例項中的某個屬性是來自本地屬性,還是繼承自原型物件屬性。例如
alert(doga.hasownproperty(name))//true
in運算子
in運算子可以判斷某個屬性是否屬於例項物件,不管是本地屬性還是繼承自原型物件屬性。如
alert("name" in doga); //true
alert("species" in doga); //true
var foo = 1;
function main()
第一題解答:首先根據js的變數提公升規則,可以知道,全域性的foo被main函式遮蔽了,main函式在內部定義了乙個foo同名的變數,該變數在第乙個console之前只定義而未賦值,故為undefined(undefined有兩種情況會出現,已定義未賦值,未定義)。
而在第二個console的時候,this指向的是window,故輸出為1
js繼承的原理
js中的物件和函式最頂級的兩個類為object和function,任何由我們定義的函式或物件都是這兩個類的子類 也就是說js中的一切都是物件.一.函式物件和一般物件 物件分為函式物件和一般物件,函式物件,比如function f var f function var f new function a...
JS繼承原理剖析
1 原型鏈繼承 建構函式 原型和例項之間的關係 每個建構函式都有乙個原型物件,原型物件都包含乙個指向建構函式的指標,而例項都包含乙個原型物件的指標。繼承的本質就是複製,即重寫原型物件,代之以乙個新型別的例項。function supertype supertype.prototype.getsupe...
js繼承的原理 方式以及優缺點
之前看js繼承問題,自己查閱資料,看到有一篇文章整理還可以,便在文章的基礎上又細化了一些。js作為物件導向的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在js中實現繼承呢?讓我們拭目以待。js繼承的實現方法 原型鏈繼承 構造繼承 例項繼承 拷貝繼承 組合繼承 寄生組合繼承。既然要實現繼承,那麼...