第一:如何理解函式、建構函式相同點和不同點?
建構函式就是乙個普通的函式,建立方式和普通函式沒有區別,不同的是建構函式習慣上首字母大寫。
建構函式和普通函式的區別就是呼叫方式的不同,普通函式是直接呼叫,而建構函式需要使用new關鍵字來呼叫。
例如:建立乙個person函式和person建構函式
//普通函式
function
person
(name , age ,gender)
;//將新的物件返回
return obj;
}//普通函式的呼叫
var obj =
person
("蜘蛛精",18
,"女");
console.
log(obj)
;//建構函式
function
person
(name , age , gender);}
// 建構函式的呼叫
var per =
newperson
("豬八戒",28
,"男");
console.
log(per)
;
通過普通函式建立的物件都是object的例項,通過建構函式建立的的物件是其自身的例項,但是所有物件都是object的後代。
例如:上面的例子在控制台輸出的結果看下圖
4. 當以函式的形式呼叫時,this是window,而當以建構函式的形式呼叫時,this就是新建立的那個物件。
//普通函式
functionfn(
)//普通函式的呼叫
var obj =fn(
)//建構函式
function
function()
//建構函式的呼叫
var fn =
newfunction
()
第二:原型與原型鏈之間的關係
一、關於原型:
我們所建立的每乙個函式,解析器都會向函式中新增乙個屬性prototype,而prototype屬性指向乙個物件,也就是這個函式的原型物件,我們也可以稱之為原型。
如果函式作為普通函式呼叫prototype沒有任何作用,當函式以建構函式的形式呼叫時,它所建立的物件中都會有乙個隱含的屬性,指向該建構函式的原型物件,我們可以通過__proto__來訪問該屬性。
原型物件就相當於乙個公共的區域,所有同乙個類的例項都可以訪問到這個原型物件,我們可以將物件中共有的內容,統一設定到原型物件中。
二、關於原型鏈:
原型物件也是物件,所以它也有原型,當我們使用乙個物件的屬性或方法時,會現在自身中尋找,自身中如果有,則直接使用,如果沒有則去原型物件中尋找,如果原型物件中有,則使用,如果沒有則去原型的原型中尋找,這樣就形成乙個鏈式結構,我們稱之為原型鏈。
原型鏈最頂層是object物件的原型,object物件的原型沒有原型,如果使用乙個物件的屬性或方法時,原型鏈中沒有,一直找到object原型,在object原型中依然沒有找到,則返回undefined。
所謂原型鏈其實就是由原型物件的原型物件構成的乙個鏈式結構。三、原型的作用:四、如何檢查物件中含有某乙個屬性
console.
log(
"屬性名"
in 物件名)
;
五、檢查乙個物件自身是否含有某乙個屬性
console.
log(物件名.
hasownproperty
("屬性名"))
;
第
三、函式、建構函式當中的原型物件
javascript原型和原型鏈,建構函式和例項
原型 建構函式 就是工廠,原型的例項就是工廠按照圖紙生成的工具 比如汽車 原型鏈 隱式的 就是生成的工具所具有的功能,而功能是工具的屬性,生成什麼樣的工具是由工廠 建構函式 決定的,圖紙是有工廠和客戶共同決定的 var ca ctory function options this.stop func...
js的原型 原型鏈 建構函式
js裡一切皆物件。有js自己內部的物件,還有使用者自定義的物件。所有的物件都是從原型上衍生出來的。原型本身也是物件,原型鏈的最高層就是object。兩個重要的屬性 prototype,proto 所有的物件都有 proto 屬性,通過.proto 一層一層,最後到達object,object的 pr...
js關於原型建構函式和原型鏈的理解
js的物件導向方式的函式有很多種方式,其中有兩個比較重要的是兩種方式一是建構函式模式,一是原型模式。1 建構函式模式如 function persion name,age var person1 new person alex 29 person1.sayname alex var person2 ...