hasOwnProperty和isPrototypeOf

容易搞混的JavaScript方法:hasOwnProperty和isPrototypeOf

2011 年 10 月 10 日 by Ryan | 1 CommentViews: 95 Today Views: 1

说容易搞混,其实就是掌握得不好嘛,大家就别见怪了,我一向都是水过鸭背式地看书的。最后转性了,才认真地看字了。前面写过一篇类似的文章

hasOwnProperty

介绍这个方法之前,先讲一下今天遇到的问题,我们一般要循环一个数组,我们会怎么办?
有两种方案可以选择,分别是for和for…in,问题是这两种方法有什么不同?
回答这个问题,我们只需要看例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

Array.prototype.foo = "someValue";

var array = ['a', 'b', 'c'];

for (var i in array) {

alert(array[i]);

}

Syntax

for(prop in object){……}

//for in的语法:

//很显然这会枚举了所有方法属性,结果就会是a,b,c,someValue

//而for的话只会循环出a,b,c

这也就是别人所说的,不用for in的好处。在prototype库中,整个库都是以扩展Object的为基础的,这样就很容易出错。当然,本人是没有研究过Prototype这个库的,只是看过一点代码而已。那有什么方法可以让它只循环出只属于它自己的属性呢?

2011-12-09 补:

for in会循环出对象所有的function和prototype properties,hasOwnProperty方法是不会查找原型链的。

下面就是我们今天的第一个介绍的hasOwnProperty:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

var obj = {

"a": 1,

"b": 2,

"c": 3

};

for (var prop in obj) {

if (obj.hasOwnProperty(prop)) {

// or if (Object.prototype.hasOwnProperty.call(obj,prop)) for safety...

alert("prop: " + prop + " value: " + obj[prop])

}

}

//Syntax

//obj.hasOwnProperty(prop)

//由于时间问题,我已经去抄了一段代码。这个for in加上了一个hasOwnProperty来判断后,就能准确地找出我们想要的结果了。

//其中它还有一句Object.prototype.hasOwnProperty.call(obj,prop)),

//大概是因为在原型链中,使用最顶级的方法应该是最安全的,没有污染到它。

isPrototypeOf

1

2

Syntax

prototype.isPrototypeOf(object)

1

2

3

4

5

6

7

8

9

10

11

12

13

function foo(){

this.name = 'foo';

};

function bar(){};

bar.prototype = new foo();

var goo = new bar();

console.log(goo.name); //foo

console.log(bar.prototype.isPrototypeOf(goo));//true

//在bar的原型链中有当前对象goo,则isPrototypeOf方法返回true。

Categories: MyPost | Tags: hasOwnProperty, isPrototypeOf | Permalink

 

原文地址:http://www.coolicer.com/2011/10/10/javascript-hasownproperty-and-isprototypeof.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2 400 index.vue:399 QiniuRequestError {name: 'RequestError', message: 'xhr request failed, code: 400 response: {"error":"…field CompleteMultipart.mimeType of type string"}', stack: 'Error\n at QiniuRequestError.QiniuError (webpack…node_modules/qiniu-js/esm/utils/helper.js:248:24)', code: 400, reqId: 'Mm0AAACDvvroC2YX', …} code : 400 data : error : "json: cannot unmarshal array into Go struct field CompleteMultipart.mimeType of type string" [[Prototype]] : Object constructor : ƒ Object() hasOwnProperty : ƒ hasOwnProperty() isPrototypeOf : ƒ isPrototypeOf() propertyIsEnumerable : ƒ propertyIsEnumerable() toLocaleString : ƒ toLocaleString() toString : ƒ toString() valueOf : ƒ valueOf() __defineGetter__ : ƒ __defineGetter__() __defineSetter__ : ƒ __defineSetter__() __lookupGetter__ : ƒ __lookupGetter__() __lookupSetter__ : ƒ __lookupSetter__() __proto__ : (...) get __proto__ : ƒ __proto__() set __proto__ : ƒ __proto__() isRequestError : true message : "xhr request failed, code: 400 response: {\"error\":\"json: cannot unmarshal array into Go struct field CompleteMultipart.mimeType of type string\"}" name : "RequestError" reqId : "Mm0AAACDvvroC2YX" stack : "Error\n at QiniuRequestError.QiniuError (webpack-internal:///./node_modules/qiniu-js/esm/errors/index.js:47:22)\n at new QiniuRequestError (webpack-internal:///./node_modules/qiniu-js/esm/errors/index.js:55:28)\n at xhr.onreadystatechange (webpack-internal:///./node_modules/qiniu-js/esm/utils/helper.js:248:24)" [[Prototype]] : QiniuError constructor : ƒ QiniuRequestError(code, reqId, message, data) [[Prototype]] : Object
06-07

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值