JavaScript學習要點(四)

2021-07-03 22:45:05 字數 1556 閱讀 5212

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 的...