hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()的用法
2013-12-10 18:31
330 查看
javascript中有原型这么一个概念,任何一个构造函数都有它对应的原型(prototype),我们可以给这个原型赋予一些我们想要的属性,像下面这样:
这里我定义了一个Gadget类的实例--newtoy对象。 在这个对象中,我们可以访问对象内部及其原型对象中的属性或者方法。 如果想要获得某个对象所有属性的列表,我们可以使用for-in循环:
我们可以得到下面的结果:
这时候,如果我们想要把原型中的属性过滤掉,就可以首先使用hasOwnProperty()来判断该属性是不是属于对象内部的:
另外需要注意的几点是:
只有那些可枚举的属性才会被显示出来(一般内建属性都是不可枚举的)
原型中的各个原型属性也会被显示出来,当然前提是它们是可枚举的
propertyIsEnumerable()用于测试该属性是否可枚举,对于所以的原型属性,propertyIsEnumerable()都会返回false,包括那些在for-in循环中可枚举的属性。但如果propertyIsEnumerable()的调用是来自原型链上的某个对象,那么该对象中的属性是可枚举的。例如:
newtoy.constructor.prototype.propertyIsNumerable('price');
//返回: ture
每个对象中都会有一个isPrototypeOf()方法,这个方法会告诉我们当前对象是否是另外一个对象的原型。
//返回: true
function Gadget(name, color){ this.name = name; this.color = color; this.whatAreYou = function(){ return 'I am a ' + this.color + ' ' + this.name; } } Gadget.prototype.price = 100; Gadget.prototype.rating = 3; Gadget.prototype.getInfo = function(){ return 'Rating: ' + this.rating + ', price: ' + this.price; }; var newtoy = new Gadget('webcam', 'black');
这里我定义了一个Gadget类的实例--newtoy对象。 在这个对象中,我们可以访问对象内部及其原型对象中的属性或者方法。 如果想要获得某个对象所有属性的列表,我们可以使用for-in循环:
for i in newtoy{ console.log(i + ' = ' + newtoy[i]); }
我们可以得到下面的结果:
name = webcam color = black whatAreYou = function (){ return 'I am a ' + this.color + ' ' + this.name; } price = 100 rating = 3 getInfo = function (){ return 'Rating: ' + this.rating + ', price: ' + this.price; }
这时候,如果我们想要把原型中的属性过滤掉,就可以首先使用hasOwnProperty()来判断该属性是不是属于对象内部的:
for(var i in newtoy){ if(newtoy.hasOwnProperty(i)) console.log(i + ' = ' + newtoy[i]); }
另外需要注意的几点是:
只有那些可枚举的属性才会被显示出来(一般内建属性都是不可枚举的)
原型中的各个原型属性也会被显示出来,当然前提是它们是可枚举的
propertyIsEnumerable()用于测试该属性是否可枚举,对于所以的原型属性,propertyIsEnumerable()都会返回false,包括那些在for-in循环中可枚举的属性。但如果propertyIsEnumerable()的调用是来自原型链上的某个对象,那么该对象中的属性是可枚举的。例如:
newtoy.constructor.prototype.propertyIsNumerable('price');
//返回: ture
每个对象中都会有一个isPrototypeOf()方法,这个方法会告诉我们当前对象是否是另外一个对象的原型。
var monkey = { hair: true, feeds: 'bananas' }; function Human(name){ this.name = name; } Human.prototype = monkey; var tom = new Human("Tom"); monkey.isPrototypeOf(tom);
//返回: true
相关文章推荐
- [js方法pk]之instanceof() vs isPrototypeOf() hasOwnProperty() vs propertyIsEnumerable()
- instanceof() VS isPrototypeOf() hasOwnProperty() VS propertyIsEnumerable()
- hasOwnProperty(),propertyIsEnumerable( ) ,isPrototypeOf( )
- JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
- hasOwnProperty和isPrototypeOf用法
- javascript中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
- js中的hasOwnProperty和isPrototypeOf方法使用实例
- hasOwnProperty isPrototypeOf instanceof
- javascript 对象及原型继承有关的属性:constructor、prototype、isPrototypeOf、instanceof、in 、hasOwnProperty 等等
- JavaScript isPrototypeOf和hasOwnProperty使用区别
- (转)js中的hasOwnProperty和isPrototypeOf方法
- javascript 对象及原型继承有关的属性:constructor、prototype、isPrototypeOf、instanceof、in 、hasOwnProperty 等等
- hasOwnProperty与isPrototypeOf
- js中的hasOwnProperty和isPrototypeOf方法
- js中的hasOwnProperty和isPrototypeOf方法
- javascript--hasOwnProperty()+isPrototypeof()+in方法
- hasOwnProperty() and isPrototypeOf()
- js中的hasOwnProperty和isPrototypeOf方法
- js中的hasOwnProperty和isPrototypeOf方法
- js中的hasOwnProperty和isPrototypeOf方法