当前位置: 代码迷 >> 综合 >> hasOwnProperty()到底在哪?
  详细解决方案

hasOwnProperty()到底在哪?

热度:38   发布时间:2024-01-06 15:25:45.0

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