0

我最近看了一个指南,想更好地理解 hasOwnProperty 的概念。

根据 Mozilla:

“hasOwnProperty() 方法返回一个布尔值,指示对象是否具有指定的属性作为自己的(不是继承的)属性。”

我创建了一个对象

var test = {yes:function(){}}

然后做了

test.hasOwnProperty('toString')

它返回错误。这是因为 toString 是我没有在测试中创建的方法,对吗?

但是如果我将 hasOwnProperty 记录到一个数组并传递长度,那么

var arr1 = new Array
arr.hasOwnProperty('length') //appears to return true

它返回 true,但我从未声明长度。

我认为 hasOwnProperty 仅适用于未继承的属性-

那么为什么当数组对象继承长度属性时,在数组上使用 hasownprop('length') 会返回 true,

var test = {yes:function(){}}
test.hasOwnProperty('toString') //false

为什么^这会返回假?toString 是对象原型上的方法,当我将它登录到 Google Chrome 控制台时看到它

4

1 回答 1

1

这是因为 toString 是我没有在测试中创建的方法,对吗?

是的,从对象文字创建的对象只有在文字中声明的自己的属性。

但是你没有明确声明一个属性并不意味着它是继承的,或者它不存在。数组确实有一个自己的.length属性,该属性基本上是由数组构造函数创建的——在new Array调用中。

想象一下:

function Test() {
    this.prop = "some value";
}
var x = new Test;
console.log(x.hasOwnProperty("prop")) // what do you expect?
于 2017-12-16T19:37:03.067 回答