如何在Javascript中访问其他对象的私有方法(但它是相同的instanceof)

时间:2017-12-04 04:53:53

标签: javascript class

var a1 = new A("test")
var a2 = new A("test2")
console.log(a2.getOtherValue(a1)) // -> expected "test"
a2.setOtherValue(a1, "test3") // set another object value
console.log(a1.getValue()) // -> expected "test3"

我如何实现这个?

1 个答案:

答案 0 :(得分:1)

您可以使用getter和setter方法创建属性,在添加时,您可以改变自己的值。使用当前对象变换其他对象是一个坏主意。

以下是一个示例:

function MyNumber(value) {
  var _value = value;

  Object.defineProperty(this, 'value', {
    get: function() {
      return _value;
    },
    set: function(v) {
      if(!isNaN(v))
        _value = v;
    }
  });
}

MyNumber.prototype = (function() {
  var proto = {};
  proto.add = function(o2) {
    if (o2 instanceof MyNumber) {
      this.value = this.value + o2.value;
    } else {
      throw new Error('Mismatched type. Expected an object of type MyNumber but got ' + o2.constructor.name);
    }
  }
  return proto;
})();

var o1 = new MyNumber(10);
var o2 = new MyNumber(20);

o1.add(o2);
console.log(o1.value);

var o3 = {
  value: 40
}

try {
  o1.add(o3);
} catch (ex) {
  console.log(ex.message)
}