Object返回自己的属性并保留方法

时间:2016-08-26 12:57:14

标签: javascript object getter

我有一个包装一些数据的对象:

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的值。如果可能的话,我该怎么做? 我的想法是,像吸气剂一样适合,但无法弄清楚在哪里以及如何指定一个。

4 个答案:

答案 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)

坚持原始片段,工厂看起来是个不错的选择:

max_input_time

你甚至可以将道具作为参数传递,以获得一种更灵活的方式来产生" unenumerable"访问私有成员的方法。