2017-06-14 64 views
0

这是简历:如何通过点符号调用一个私有方法内部构造?:如何通过构造函数中的点符号来调用私有方法?

我知道有很多问题问同一个...在这个格外我coulnd't找到任何地方,所以我决定问。

receiveAttackFrom()方法如何可以是私有的? 所以如果我试试这个...

soldier1.receiveAttackFrom(soldier2, 50) 

将抛出一个错误

var Soldier = function(_name, _life, _damage) { 

var name = _name 
var life = _life 
var damage = _damage 

this.getName = function() {return name} 
this.getLife = function() {return life} 
this.getDamage = function() {return damage} 

this.setLife = function(_life) {life = _life} 

this.attack = function(_targ) { 

    _targ.receiveAttackFrom(this, this.getDamage()); 
} 

// how to put this as a private method? : 
this.receiveAttackFrom = function(_other, _damage) { 

    this.setLife(this.getLife() - _damage)  
} 

}

// MAIN 
var soldier1 = new Soldier('jonas', 100, 25); 
var soldier2 = new Soldier('mark', 90, 30); 

soldier1.attack(soldier2); 
// so if I try this... 
// soldier1.receiveAttackFrom(soldier2, 50) 
// would throw an error 
+1

为什么你认为它应该是私有的? –

+0

什么是错误信息? – PeterMader

+0

这段代码没有错误......我只是想让公共方法成为一种私有方法。但在构造函数中使用点符号 –

回答

0
var _self = this; 
this.receiveAttackFrom = function(_other, _damage) { 
    _self.setLife(_self.getLife() - _damage)  
} 
+0

评论/解释你的答案将有助于OP并提高其长期价值。 –

0

在你的构造与var开始定义功能,绑定到this

var receiveAttackFrom = function (_other, _damage) { 
    this.setLife(this.getLife() - _damage)  
}.bind(this); 

然后调用它的构造函数中不带前缀:

receiveAttackFrom(arg1, arg2); 
相关问题