谈谈你对原型链的理解?✨
这个问题关键在于两个点,一个是原型对象是什么,另一个是原型链是如何形成的
原型对象
绝大部分的函数(少数内建函数除外)都有一个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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。