繁体   English   中英

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM