//知识点1:for In循环是可以枚举到继承的属性的;//知识点2:使用defineProperty让属性无法通过forIn枚举到;//知识点3:用definedProperty重新定义一个属性药把这个属性设置为空,然后重新定义才行哦;
var obj =
{};
Object.defineProperty(obj, "name"
, {
get : function() {
return 1
},
enumberable : false
});
//使用ECMA5中的defineProperty可以让自定义属性不可枚举;
for( prop
in obj ){
console.log(prop) //name是无法枚举到的;
};
function extend( _super ) {
var F =
function() {};
F.prototype =
_super;
return (
new F);
};
var Fn =
function(){};
Fn.prototype =
{
constructor : Fn,
__prop______ : "super"
};
var subInstance = extend(
new Fn() );
//for in 循环是可以枚举到父级的继承属性的;
for(
var prop
in subInstance)
console.log(prop)//constructor ,__prop______
//要让继承的属性也无法枚举到,那就在父级中设置enumberable;
Object.defineProperty(Fn.prototype, "_test"
,{
enumberable : false ,
value : "__new_super"
});
//PS,如果你重新定义__prop____为不可以枚举不可行,必须要把__prop____设置为空然后重新定义不可以枚举的属性才行;
Fn.prototype.__prop______ =
undefined;
Object.defineProperty(Fn.prototype, "__prop______"
,{
enumberable : false ,
value : "_new___prop______"
});
var subInstance = extend(
new Fn() );
for(
var prop
in subInstance);
console.log(prop)//constructor ,__prop______
转载于:https://www.cnblogs.com/diligenceday/p/4057348.html