文章出處
文章列表
//知識點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______
文章列表
全站熱搜