共计 1859 个字符,预计需要花费 5 分钟才能阅读完成。
谈谈你对原型链的了解?✨
这个问题关键在于两个点,一个是原型对象是什么,另一个是原型链是如何造成的
原型对象
绝大部分的函数 (多数内建函数除外) 都有一个 prototype
属性, 这个属性是原型对象用来创立新对象实例, 而所有被创立的对象都会共享原型对象, 因而这些对象便能够拜访原型对象的属性。
例如 hasOwnProperty()
办法存在于 Obejct 原型对象中, 它便能够被任何对象当做本人的办法应用.
用法:object.hasOwnProperty(propertyName)
hasOwnProperty()
函数的返回值为Boolean
类型。如果对象 object 具备名称为 propertyName 的属性,则返回true
,否则返回false
。
var person = {
name: "Messi",
age: 29,
profession: "football player"
};
console.log(person.hasOwnProperty("name")); //true
console.log(person.hasOwnProperty("hasOwnProperty")); //false
console.log(Object.prototype.hasOwnProperty("hasOwnProperty")); //true
原型链
起因是每个对象都有 __proto__
属性,此属性指向该对象的构造函数的原型。
对象能够通过 __proto__
与上游的构造函数的原型对象连接起来,而上游的原型对象也有一个__proto__
,这样就造成了原型链。
经典原型链图
can you talk about your understanding of the prototype chain ?
The key to this question lies in two points. the first one is what the prototype object is, the another one is how the prototype chain is fromed.
prototype object
The most functions all have a prototype
property, the property is used to create new object instance by prototype object, and all the built object will share the prototype object toghter, so that these objects can access the property of prototype object.
Such as the hasOwnProperty()
function exists in the prototype object of Object
, it can be used by any objects as its own function.
usage:
object.hasOwnProperty(propertyName)
The return value of
hasOwnProperty()
isBooolean
type, if theobject
has a property that calledpropertyName
, then it returnstrue
, otherwise it returnsfalse
.
var person = {
name: "Messi",
age: 29,
profession: "football player"
};
console.log(person.hasOwnProperty("name")); //true
console.log(person.hasOwnProperty("hasOwnProperty")); //false
console.log(Object.prototype.hasOwnProperty("hasOwnProperty")); //true
prototype chain
The reason is that each object has a __proto__property that points to the prototype object constructor.
Objects can be __proto__connected upstream of the prototype object to the constructor up the prototype object has an upstream __proto__, thus forming a prototype chain.
Classic prototype chain diagram