Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript使用隐藏函数扩展类_Javascript_Object_Prototype - Fatal编程技术网

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] ); } 然后我使用另一个函数来执行如下循环:

我今天遇到了这个问题:

我想用一些有用的函数扩展一个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] );
}
所以我把东西从“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

这是一个很好的解决方案!这对我有用。谢谢!