文章出處

//知識點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______

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()