hasOwnProperty

hasOwnProperty

let contentStyle={

fontSize: this._contentFontSize,

...this._contentStyle

}

for(let i in contentStyle){

//判断contentStyle是否具有属性i

if(contentStyle.hasOwnProperty(i)){

contentDom.style[i]=contentStyle[i];

console.log(contentStyle.hasOwnProperty(i));

}

}

老师你好,这里的hasOwnProperty不太理解,在new $Msg里传入contentStyle:{ qq:"12345" }的时候,i不就已经是contentStyle里面的属性了吗?而且就算我写的是qq也能返回true,hasOwnProperty到底判断了什么?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,因为传入的这个参数中,qq就是对象自身的属性,所以肯定会返回true。hasOwnProperty判断对象是否包含特定的自身的属性,例如有的属性是继承的,有的属性是原型上的。那么使用hasOwnProperty判断这些会返回false。这里体现不出来,可以看如下例子:

http://img1.sycdn.imooc.com//climg/5e8be32a0931725505860370.jpg

sayGoodBy是foo原型对象上的方法,并不是foo自身的,所以使用hasOwnProperty判断返回false。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 花生香又脆 提问者 #1
    老师你好,这个用法我明白了,但是我不明白这个判断在这段代码中有什么用,因为写进contentStyle:{ }中的都是contentStyle自身的属性,那好像不需要判断啊,就算这个方法本来是原型上的,但是我写进了contentStyle里面,不也是contentStyle的方法了吗?我觉得这个判断没有办法筛选掉任何一项啊?
    2020-04-07 10:54:18
好帮手慕夭夭 2020-04-07 14:34:07

同学你好,即使是自己定义的对象,它也会有很多js规定好的属性。示例:

http://img1.sycdn.imooc.com//climg/5e8c1df6097725d702850075.jpg

输出如下:

http://img1.sycdn.imooc.com//climg/5e8c1e07096cbdc905120324.jpg

例如常见的toString()方法,你传入任何一个对象,它都会有这个方法,这是js规定好的。这个方法并不是对象自身的,而是它原型上的方法。使用b.hasOwnProperty("toString")去判断,返回的就是false。 

祝学习愉快 ~


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师