带有隐藏函数的JavaScript扩展类
JavaScript Extend Class with hidden functions
我今天遇到这个问题:
我想用一些有用的函数来扩展JavaScriptObject类,所以我写了这样的东西:
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"函数现在要么在我的扩展对象中,要么在它的__proto__
中。我只想避免这种情况,而不在我的"for"循环中使用它:
if( typeof obj[i] !== 'function' ) // Then do it
所以我想知道本机函数(例如toString())是如何实现的,以便在原型之外保持不可见。有什么建议吗?
您可以使用一个名为defineProperty
的方法来设置属性,并使其不可枚举(或者如您所说,保持不可见):
var obj = {};
Object.defineProperty(obj, 'test', {
enumerable: false,
configurable: false,
writable: true,
value: 'hello'
});
您的属性obj.test
存在(值为hello
),但现在不可枚举,因此执行以下操作:
for(var i in obj) console.log(i);
// OR
Object.keys(obj);
不会打印"test",但您仍然可以将其作为属性(obj.test
)访问
相关文章:
- 如何使用Javascript扩展HTML元素
- '让块'仅在Mozilla JavaScript扩展中可用(使用moz选项)
- 关于 JavaScript 扩展的代码示例
- 如何在Sonarqube Javascript扩展中获取项目路径
- 如何使用Javascript扩展对象'的原型使用声明中的变量
- Javascript扩展对象's原型,但保留旧原型
- 如何创建一个小型Javascript扩展语言
- Javascript扩展了原型,并在中实现了
- 让 JSFIDDLE 使用 JavaScript 扩展脚本
- Javascript 扩展类与 props
- JavaScript 扩展 Array 以实现 map2
- 如何使 XSLT Javascript 扩展函数返回节点集
- 文件上传Javascript扩展管理
- 我可以用javascript扩展控制台对象(用于重新路由日志记录)吗
- 带有隐藏函数的JavaScript扩展类
- 用Javascript扩展类
- 如何用Javascript扩展formdata并将其发送到控制器
- 在响应式设计中禁用Javascript扩展器
- 单击图片缩略图并使用javascript扩展到中心
- TFS 2015通过JavaScript扩展获得全局列表