JavaScript使用隐藏函数扩展类
我今天遇到了这个问题: 我想用一些有用的函数扩展一个JavaScript对象类,所以我写了如下内容:JavaScript使用隐藏函数扩展类,javascript,object,prototype,Javascript,Object,Prototype,我今天遇到了这个问题: 我想用一些有用的函数扩展一个JavaScript对象类,所以我写了如下内容: Object.prototype.fn = function() { // Do some cool stuff... }; for( var i in obj ) { this[i] = obj[i]; // 'this' --> is another Object console.log( i, obj[i] ); } 然后我使用另一个函数来执行如下循环:
Object.prototype.fn = function() {
// Do some cool stuff...
};
for( var i in obj ) {
this[i] = obj[i]; // 'this' --> is another Object
console.log( i, obj[i] );
}
然后我使用另一个函数来执行如下循环:
Object.prototype.fn = function() {
// Do some cool stuff...
};
for( var i in obj ) {
this[i] = obj[i]; // 'this' --> is another Object
console.log( i, obj[i] );
}
所以我把东西从“obj”移到了另一个物体上。但是,正如您在日志中看到的,“fn”函数现在要么在我的扩展对象中,要么在它的\uuuuu proto\uuuu
中。我只想避免这种情况,而不在我的“for”循环中使用它:
if( typeof obj[i] !== 'function' ) // Then do it
所以我想知道如何实现本机函数(例如toString())使其在原型之外不可见。有什么建议吗?您可以使用名为
defineProperty
的方法设置属性,使其不可枚举(或者如您所说,保持不可见):
您的属性obj.test
存在(值为hello
),但现在不可枚举,因此执行以下操作:
for(var i in obj) console.log(i);
// OR
Object.keys(obj);
不会打印“test”,但您仍然可以将其作为属性访问(
obj.test
)这是一个很好的解决方案!这对我有用。谢谢!