Javascript原型组织

Javascript prototype organisation

有了这个组织,是否可以参考 "id" 属性?

  function house(id) {  this.id = id }

  house.prototype.buy  = function() {  }
  house.prototype.sell = function() {  }

  house.prototype.buy.makeOffer=function(){
    //how can id be printed?
    console.log( 'id = ' + this.????  )      
  }

  var h = new house(1)
  h.buy.makeOffer();

我正在尝试找出为一个对象组织大量原型的最佳方法。由于 .buy 将有很多子功能,所以 .sell() 即:

  h.buy.makeOffer();
  h.buy.inspect();
  h.buy.counterOffer();
  h.buy.signContact();

  h.sell.prepare()
  h.sell.advertise()
  h.sell.reviewOffer()

在Javascript中使用这样的结构确实不是很容易:

house.prototype.buy.makeOffer=function(){
    //how can id be printed?
    console.log( 'id = ' + this.????  )      
}

问题是,当您像这样在 house 实例上调用该方法时:

var h = new house(1);
h.buy.makeOffer();

makeOffer() 方法中的 this 值将指向原型中的 buy 对象(这是您的 buy 方法),它不会指向你的 house 对象。这就是方法调用在 Javascript 中的工作方式(this 指向具有该方法的对象)当存在您想要通过 this 引用的实际实例数据时呈现这些嵌套方法非常不切实际.


通常的解决办法是不实现嵌套。只需整合名称,无需额外的对象层,如下所示:

house.prototype.buyMakeOffer=function(){
    //how can id be printed?
    console.log( 'id = ' + this.????  )      
}

var h = new house(1);
h.buyMakeOffer();