hasOwnProperty在JavaScript中
function Shape() { this.name = "Generic"; this.draw = function() { return "Drawing " + this.name + " Shape"; }; } function welcomeMessage() { var shape1 = new Shape(); //alert(shape1.draw()); alert(shape1.hasOwnProperty(name)); //this is returning false }
.welcomeMessage
调用body.onload
事件。
我期望shape1.hasOwnProperty(name)
返回true,但是它返回false。
什么是正确的行为?
hasOwnProperty
是一个正常的JavaScript函数,它接受一个string参数。
当你调用shape1.hasOwnProperty(name)
你传递的是name
variables的值(不存在),就像你写alert(name)
。
您需要使用包含name
的string调用hasOwnProperty
,如下所示: shape1.hasOwnProperty("name")
。
hasOwnProperty
期望属性名称为一个string,所以它会是shape1.hasOwnProperty("name")
尝试这个:
函数welcomeMessage() { var shape1 = new Shape(); //警报(shape1.draw()); 警报(shape1.hasOwnProperty( “名字”)); }
当在JavaScript中使用reflection时,成员对象总是被称为string的名称。 例如:
for(i in obj) { ... }
循环迭代器我将保存一个string值的属性的名称。 要在代码中使用它,必须使用如下的数组运算符来访问属性:
for(i in obj){ alert(“obj的值”+ i +“=”+ obj [i]); }
我写了一个名为object-hasOwnProperty的开源组件。
例子:
hasOwnProperty({foo: 'bar'}, 'foo') // => true hasOwnProperty({foo: 'bar'}, 'bar') // => false
源代码:
function hasOwnProperty(obj: {}, prop: string|number): boolean { return Object.prototype.hasOwnProperty.call(obj, prop); };
对于variables: –
var lol; console.log(window.hasOwnProperty("lol"));//true console.log("lol" in window);//true
对象: –
var object = { key: "value" }; console.log(object.hasOwnProperty("key"));// true console.log("key" in object);// true console.log(object.key); // undefined