对象返回自己的属性并保留方法
Object returns own property and preserves methods
我有一个对象来包装一些数据:
function Obj1() {
var _foo = 'bar'
this.obj2 = {
'b': 'c'
}
this.method = function() {
return _foo
}
}
var obj1 = new Obj1()
现在,当我调用console.log(obj1);
时,我希望它显示对象obj2
的内容。诀窍是我仍然需要能够调用obj1.method
并获得_foo
的值。如果有可能,我该怎么做?我的想法是getter之类的东西是合适的,但不知道在哪里以及如何分配一个
据我所知,你试图隐藏method
属性。要实现这一点,请使用Object.defineProperty
。函数将不会被记录,因为enumerable
属性默认为false
,这阻止了属性显示在console.log
中。
function Obj1() {
var _foo = 'bar'
this.obj2 = {
'b': 'c'
}
Object.defineProperty(this.obj2, 'method', {
value: function() {
return _foo;
}
});
return this.obj2;
}
var obj1 = new Obj1()
console.log(obj1);
console.log(obj1.method());
如果我理解正确,您可以使用prototype
function Obj1() {
this.obj2 = {
'b': 'c'
}
}
Obj1.prototype.method = function() {
return 'bar';
}
var obj1 = new Obj1();
//prints only properties
console.log(obj1);
//prints method result
console.log(obj1.method())
既然你调用了new Obj1()
。结果变量var obj1
是一个类对象,而不是一个函数,为了获得obj2
的值,您必须在控制台日志中调用obj1.obj2
。如果你想要obj1保存obj2的值。然后使用以下代码
function Obj1() {
var obj2 = {
'b': 'c'
}
return this.obj2;
}
var obj1 = Obj1();
console.log(obj1);
这将在控制台日志中为您提供所需的结果,但是该对象将不再是一个类对象,并且将只有obj2的值。
坚持您的原始代码片段,工厂看起来是一个不错的选择:
function factory() {
var foo = 'bar';
var props = { b: 'c'};
var proto = {
method: function() { return foo; }
};
var obj = Object.create(proto);
Object.assign(obj, props);
return obj;
}
var obj = factory();
console.log(obj); // {b: 'c'}
console.log(obj.method()) // 'foo'
你甚至可以将props作为参数传递,以获得一种更灵活的方式,通过访问私有成员的"不可枚举"方法来生成对象。
相关文章:
- Rx-subscribe方法如何在不传递上下文的情况下保留上下文
- 控制台.log包装器,保留行号并支持大多数方法
- JavaScript:有没有更好的方法来保留你的数组,但有效地连接或替换项目
- 如何从新对象返回值,同时保留其方法
- Javascript子类对象不保留基类的属性/方法
- 如何在回发上保留选定的选项卡或以编程方式调用之前激活方法
- 保存dom的方法应该保留较少的内存
- 保留公共方法的JavaScript压缩
- 在保留状态的同时调用原型方法
- 从视图源下载html的简单方法,同时保留文件夹结构
- 使用.html()来替换替换元素,有没有一种方法可以保留事件
- 是否有任何解决方法可以重新抛出异常并在Javascript中保留堆栈争用
- JavaScript方法的部分应用:如何保留“this”的含义
- 如何在使用 GET 方法发送 url 时保留文本区域输入中的文本段落
- 最有效的保留sprint输出的前导空白的方法
- JavaScript[].Sort()方法在应该保留元素时进行排序
- 当使用微软翻译工具时,是否有一种方法可以删除小部件,但保留翻译?
- 如何重命名/保留回调方法
- 对象返回自己的属性并保留方法
- 保留分配给实例方法的变量的上下文