js中建立物件都是通過建構函式建立的,所以每個物件中都有乙個指向其建構函式的指標constructor
var obj = new
object();
var arr = new
array();
var obj2 = {}; //字面量建立實質上是上面方式的簡寫
var arr2 = ;
var str = new
string("test"); //建立的是物件
var str2 = "test"; //建立的是基本型別值
console.log(typeof str); //object
console.log(typeof str2); //string
為了減少重複定義相似的物件,我們把這些相似的資料結構(屬性)和行為(方法)抽象出來形成類,這樣我們只需要建立類,然後將類例項化即可。所有物件例項繼承了類的屬性和方法。
在es5中沒有class關鍵字來建立類,它是通過建構函式和原型物件來模擬類的功能。
原型物件可以使物件例項繼承它的屬性和方法。要想實現這個繼承關係,必須讓原型物件和物件例項發生聯絡。
我們知道物件例項是通過建構函式建立的。那這個建構函式能不能先建立物件原型,然後這個建構函式再建立物件例項,這樣物件例項就通過建構函式這個紐帶和物件原型發生了聯絡。
答案是可以,
js的每個函式都有乙個prototype屬性,這個屬性是乙個指標,指向的是它的原型物件。我們通過建構函式來建立乙個物件。
function
test
()test.prototype.name = "testproto"; //建立建構函式的原型物件的屬性
test.prototype.age = 21;
var obj = new test(); //建立例項物件
console.log(obj);
console.log(test.prototype);
console.log(obj.name); //訪問到了原型物件上的name
obj是test函式的物件例項,test.prototype物件是test函式的原型物件(我們給這個原型物件新增了name和age屬性)。這兩個物件是如何發生聯絡的?
開啟瀏覽器除錯工具
可以看到obj物件有乙個_ proto_屬性,這個屬性就是指向其建構函式的原型物件。
注意:物件例項只和其建構函式的原型物件有聯絡,它繼承的是原型物件的屬性和方法,而不是建構函式的屬性和方法。為什麼物件不能繼承object的方法?
// 我們可以列印常見的物件的方法,這些方法都是在建構函式的原型中定義的。
console.log(number.prototype);
console.log(string.prototype);
console.log(boolean.prototype);
console.log(array.prototype);
console.log(object.prototype);
每個物件中都有乙個[[prototype]]屬性指向其建構函式的原型物件(一般在瀏覽器中是_ proto _屬性)
現在有兩個物件obj1,obj2。要實現obj2繼承obj1。
很簡單,只要讓 obj2._ proto _=obj1
這樣就形成了一條原型鏈,
在訪問obj2物件的屬性時,會現在obj2物件中尋找,若找到則停止尋找,返回其屬性。否則會在原型鏈上向後尋找。
比如在訪問obj的name屬性時,會在obj中找到,所以返回了」obj」,它不會再去找原型鏈上後面的name屬性了;若訪問obj的age屬性時,在obj中沒有找到,它就會去原型鏈上尋找。
for in返回物件和原型鏈上可列舉的屬性,object提供了一種方法來訪問物件本身的屬性object.getownpropertynames(),此方法不會包括原型鏈上的屬性。
//所有物件都是繼承object物件的
console.log(number.prototype.__proto__===object.prototype); //true
console.log(string.prototype.__proto__===object.prototype); //true
console.log(array.prototype.__proto__===object.prototype); //true
JS 物件 JS原型 原型鏈
參考學習 js物件 構造器函式 建立物件的函式。物件分為普通物件和函式物件。所有物件都有 proto 屬性 函式物件不止有 proto 屬性,還有prototype屬性 稱為原型物件 1.new function 產生的物件都是函式物件。2.所有函式物件的 proto 都指向function.pro...
js原型物件 原型鏈 繼承
原型物件 只要建立了乙個新函式,就會根據一些特定的規則為該函式建立乙個prototype屬性,這個屬性指向的物件就是該新函式的原型物件。預設情況下,所有原型物件都會自動獲取乙個constructor屬性,這個屬性是乙個指向prototype屬性所在函式的指標 原型物件的優點 可以讓所有物件例項共享它...
js原型物件和原型鏈的理解
原型的存在主要是為了解決在例項化時,節省記憶體,可以減少例項化是物件內部的屬性或者方法過多,可以將這些屬性或者方法放在原型上,例項物件在需要這些屬性或者方法時,可以直接呼叫,js會根據原型鏈進行查詢。function protof name,age protof.prototype.showtest...