Javascript原型组织

时间:2015-03-26 00:28:13

标签: javascript prototype

有了这个组织,是否可以引用“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()

1 个答案:

答案 0 :(得分:1)

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

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

问题是,当你在这样的房子实例上调用该方法时:

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

this方法中的makeOffer()值将指向原型中的buy对象(这是您的buy方法)并且它不会指向您的{ {1}}对象。这就是方法调用如何在Javascript中工作(house指向具有该方法的对象),当您希望通过this引用的实际实例数据非常不切实际时,这些方法会呈现这些嵌套方法。


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

this