function hasprototypeproperty(object, name)
//用來判斷是否是原型中的變數
先前建立的例項,修改原型後,例項能馬上得到原型方法,但重寫整個原型後,例項中的指標指向的卻還仍然是先前的原型
我們可以通過給原生物件的原型新增方法來對原生物件進行拓展
string.prototype.startwith = function(text);
最常用的方法:建構函式模式用於定義例項屬性,而原型模式用於定義方法和共享的屬性
function person(name, age, job)
person.prototype =
}var person1 = new person("a", 29, "aaa");
var person2 = new person("b", 27, "bbb");
person1.friend.push("c");
abc
ab != person2.friend
== person2.sayname
可以在建構函式中採用這樣一種方法,判斷若該型別中不含有某函式,就在其函式原型中新增該函式
在建構函式中,首行新增新建物件語句,尾行將其return,叫做寄生建構函式模式
使用穩妥物件的話,只能通過其內部的方法來訪問資料成員
ecmascript中採用原型鏈作為實現繼承的主要方法
原型鏈的實現
function supertype()
supertype.prototype.getsupervalue = function();
function subtype()
subtype.prototype = new supertype();
subtype.prototype.getsubvalue = function();
var instance = new subtype();
alert(instance.getsupervalue()); //true
可通過兩種方式來確定原型和例項之間的關係,原型鏈中出現過的建構函式instanceof都會返回true
isprototypeof也會返回true
用法分別為:
alert(instance instanceof subtype); //true
alert(instance instanceof supertype); //true
alert(instance instanceof object); //true
alert(object.prototype.isprototypeof(instance)); //true
alert(subtype.prototype.isprototypeof(instance)); //true
alert(supertype.prototype.isprototypeof(instance)); //true
通過原型鏈實現繼承的時候,不能使用物件字面量建立原型方法,這樣會重寫原型鏈,會建立乙個新的原型
實踐中很少單獨使用原型鏈
寄生組合式繼承是實現基於型別繼承的最有效的方式
JavaScript學習筆記(四)
匿名函式與閉包 匿名函式 所謂匿名函式就是沒有名字的函式,即建立乙個沒有名字的函式物件,可以將這個函式物件賦給乙個var,或者作為引數傳遞,作為函式返回值等等。var fcn function 閉包所謂閉包就是在函式中定義的函式,這個函式一般用來做返回值 即用乙個函式來生產函式 那麼返回的這個內部函...
JavaScript設計模式學習記錄(四)
1.外觀模式 個人感覺就是封裝監聽方法,使之相容各個瀏覽器,所以外觀模式其實就是封裝方法?不知道我理解的對不對 外觀模式實現 function addevent dom,type,fn else if dom.attachevent else 呼叫 var myinput document.gete...
JavaScript學習(四) 運算子
正號 正號不會對我們的數值產生任何影響 負號 負號可以對數值進行負號取反 正負號都可以將數值型別轉換成number,原理和number 函式一樣。自增 可以使變數在自身的基礎上 1 運算子 自增分為2種,a 和 a 對於原變數來說是沒有區別的,都會使原變數的值 1 不同的是a 和 a的值不同 a 的...