我有一个包装一些数据的对象:
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
的值。如果可能的话,我该怎么做?
我的想法是,像吸气剂一样适合,但无法弄清楚在哪里以及如何指定一个。
答案 0 :(得分:1)
如果我理解正确,您可以使用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())
答案 1 :(得分:1)
据我所知,你试图隐藏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());
答案 2 :(得分:0)
因为你打电话给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的值。
答案 3 :(得分:0)