hasOwnProperty()到底在哪?
-
- 提问一:那hasOwnProperty()是否在对象实例中呢?
- 提问二:那hasOwnProperty()是在实例所指的原型对象中吗?
- 提问三:那hasOwnProperty()是在实例所指的原型对象的原型对象中吗?
- 提问三:那实例所指的原型对象的原型对象是谁?
- 扩展提问:那Object对象的原型是谁?
hasOwnProperty是检测一个属性是否是存在于实例当中的一个方法。
属性在对象实例中就返回true,否则返回false
function Person() {
}Person.prototype.name = "xf";var person = new Person();person.name = "xx";console.log(person.hasOwnProperty("name"));//true
在person对象中有name属性,返回ture
提问一:那hasOwnProperty()是否在对象实例中呢?
我们来验证一下。
function Person() {
}Person.prototype.name = "xf";var person = new Person();person.name = "xx";console.log(person.hasOwnProperty("hasOwnProperty")); //false
person实例中并没有hasOwnProperty()方法。
提问二:那hasOwnProperty()是在实例所指的原型对象中吗?
继续验证:
function Person() {
}Person.prototype.name = "xf";var person = new Person();person.name = "xx";console.log(person.__proto__.hasOwnProperty("hasOwnProperty")); //false
也没有在原型对象中。
提问三:那hasOwnProperty()是在实例所指的原型对象的原型对象中吗?
验证:
function Person() {
}Person.prototype.name = "xf";var person = new Person();person.name = "xx";console.log(person.__proto__.__proto__.hasOwnProperty("hasOwnProperty")); //true
没错,是在实例所指的原型对象的原型对象中
提问三:那实例所指的原型对象的原型对象是谁?
function Person() {
}Person.prototype.name = "xf";var person = new Person();person.name = "xx";console.log(person.__proto__.__proto__.constructor); //Object
是Object,Object是所有对象的祖先。
扩展提问:那Object对象的原型是谁?
function Person() {
}Person.prototype.name = "xf";var person = new Person();person.name = "xx";console.log(person.__proto__.__proto__.__proto__); //null
是null