這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助

1. 對原型、原型鏈的理解
在JavaScript中是使用建構式來新建一個物件的,每一個建構式的內部都有一個 prototype 屬性,它的屬性值是一個物件,這個物件包含了可以由該建構式的所有實體共享的屬性和方法,當使用建構式新建一個物件后,在這個物件的內部將包含一個指標,這個指標指向建構式的 prototype 屬性對應的值,在 ES5 中這個指標被稱為物件的原型,一般來說不應該能夠獲取到這個值的,但是現在瀏覽器中都實作了 __proto__ 屬性來訪問這個屬性,但是最好不要使用這個屬性,因為它不是規范中規定的,ES5 中新增了一個 Object.getPrototypeOf() 方法,可以通過這個方法來獲取物件的原型,
當訪問一個物件的屬性時,如果這個物件內部不存在這個屬性,那么它就會去它的原型物件里找這個屬性,這個原型物件又會有自己的原型,于是就這樣一直找下去,也就是原型鏈的概念,原型鏈的盡頭一般來說都是 Object.prototype 所以這就是新建的物件為什么能夠使用 toString() 等方法的原因,
特點:JavaScript 物件是通過參考來傳遞的,創建的每個新物件物體中并沒有一份屬于自己的原型副本,當修改原型時,與之相關的物件也會繼承這一改變,

2. 原型修改、重寫
function Person(name) {
this.name = name
}
// 修改原型
Person.prototype.getName = function() {}
var p = new Person('hello')
console.log(p.__proto__ === Person.prototype) // true
console.log(p.__proto__ === p.constructor.prototype) // true
// 重寫原型
Person.prototype = {
getName: function() {}
}
var p = new Person('hello')
console.log(p.__proto__ === Person.prototype) // true
console.log(p.__proto__ === p.constructor.prototype) // false
可以看到修改原型的時候p的建構式不是指向Person了,因為直接給Person的原型物件直接用物件賦值時,它的建構式指向的了根建構式Object,所以這時候p.constructor === Object ,而不是p.constructor === Person,要想成立,就要用constructor指回來:
Person.prototype = {
getName: function() {}
}
var p = new Person('hello')
p.constructor = Person
console.log(p.__proto__ === Person.prototype) // true
console.log(p.__proto__ === p.constructor.prototype) // true
3. 原型鏈指向
p.__proto__ // Person.prototype Person.prototype.__proto__ // Object.prototype p.__proto__.__proto__ //Object.prototype p.__proto__.constructor.prototype.__proto__ // Object.prototype Person.prototype.constructor.prototype.__proto__ // Object.prototype p1.__proto__.constructor // Person Person.prototype.constructor // Person
4. 原型鏈的終點是什么?如何列印出原型鏈的終點?
由于Object是建構式,原型鏈終點是Object.prototype.__proto__,而Object.prototype.__proto__=== null // true,所以,原型鏈的終點是null,原型鏈上的所有原型都是物件,所有的物件最終都是由Object構造的,而Object.prototype的下一級是Object.prototype.__proto__,

5. 如何獲得物件非原型鏈上的屬性?
使用后hasOwnProperty()方法來判斷屬性是否屬于原型鏈的屬性:
function iterate(obj){
var res=[];
for(var key in obj){
if(obj.hasOwnProperty(key))
res.push(key+': '+obj[key]);
}
return res;
}
如果對您有所幫助,歡迎您點個關注,我會定時更新技術檔案,大家一起討論學習,一起進步,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467052.html
標籤:JavaScript
上一篇:axios口味芝士
下一篇:pm2 常用命令
