詳談javascript的原型鏈問題

2021-09-05 12:41:24 字數 1729 閱讀 8313

1、建立物件的幾種方法

// 字面量

var obj1 = ;

//new object()

var obj2 = new object();

// 建構函式

function f(name)

var obj3 = new f('小三');

// object create() 乙個新物件,帶著指定的原型物件和屬性

var obj4 = object.create();

console.log(obj1);

console.log(obj2);

console.log(obj3);

console.log(obj4);

列印結果:

另外:object.create(proto,propertiesobject) // 建立乙個新物件,使用現有的物件來提供新建立的物件的__proto__。 //proto:新建立物件的原型物件 // propertiesobject引數為null或者乙個物件,如果是其他型別則會報錯。表示新增到新建立物件的可列舉屬性

那麼什麼是原型鏈呢?簡單來說就是組成原型的鏈,我們知道每個例項都有乙個屬性__proto__指向它的原型,而原型也是乙個物件,也有__proto__指向它的原型,這樣一層層找下去,就形成了原型鏈。最後是原型鏈有什麼作用呢?

function foo()

var obj5 = new foo('小明');

var obj6 = new foo();

obj5.__proto__.say = function () ;

obj5.say();

obj6.say();

列印結果:

發現都能列印,因為say()方法是新增在原型物件上的,例項obj5和obj6都是由foo()同乙個建構函式new出來的例項,所以obj5和obj6的__proto__指向同乙個原型物件,當給原型物件新增方法或者屬性時,obj5和obj6都能訪問到。這樣可以解決多個例項都用到同一方法時,直接給原型物件新增,而不必每乙個例項物件去新增乙個方法或者屬性。在訪問屬性或者方法時會先在例項物件上查詢,如果找不到就會往上找。

再來解釋一下__proto__,prototype,constructor的聯絡

例項是由建構函式new出來的乙個物件

例項的__proto__指向原型物件 obj5.__proto__ ===  foo.prototype

建構函式的prototype指向原型  

原型的constructor指向它的建構函式 obj5.__proto__.constructor === foo

instanceof又是什麼作用呢?其實就是用來檢驗例項的__proto__和建構函式的prototype是不是指向同乙個原型物件。如果是,則返回true,否則返回false

詳談,原型與原型鏈

原型的作用就是實現屬性和方法的共享 js規定每乙個函式都有乙個proto屬性,指向另乙個物件 自身的原型 函式物件除了proto之外還有prototype屬性,當函式作為建構函式建立例項時,該屬性就被作為例項物件的原型 當乙個物件呼叫自身不存在的屬性和方法時就會去自己的proto的前輩prototy...

JavaScript的原型鏈

首先介紹下原型 原型的作用 把方法放到原型中,就可以讓同型別的物件共享 當我建立乙個建構函式。建構函式裡有原型。通過 建構函式名.prototype獲取到當前建構函式的原型。function student name,age,gender this.sayhi function 原型內部自帶乙個co...

JavaScript原型以及原型鏈

原型物件的用途是為每個例項物件儲存共享的方法和屬性,它僅僅是乙個普通物件而已。並且所有的例項是共享同乙個原型物件,因此有別於例項方法或屬性,原型物件僅有乙份。在訪問乙個物件的屬性的時候,首先在當前物件中找,如果沒有在其原型物件找 復用的內容放在prototype,讓類的例項擁有相同的功能 小紅書上的...