调用代码中未定义的函数?

时间:2014-04-06 00:27:07

标签: javascript function object methods

function Person(first,last,age) {
   this.firstname = first;
   this.lastname = last;
   this.age = age;
   var bankBalance = 7500;

   var returnBalance = function() {
      return bankBalance;
   };

  this.askTeller = function(){
      return returnBalance;
  }

}

var john = new Person('John','Smith',30);
console.log(john.returnBalance);
var myBalanceMethod = john.askTeller();
var myBalance = myBalanceMethod();
console.log(myBalance);

这是代码学院的一个例子。

我不明白
var myBalanceMethod = john.askTeller();
var myBalance = myBalanceMethod();

我的想法是var myBalanceMethod = john.askTeller();myBalanceMethod的值设置为returnBalance。然后我不确定是什么,var myBalance = myBalanceMethod();因为myBalanceMethod实际上不是一种方法,我不这么认为?有人可以解释这些最后一行代码中发生了什么

3 个答案:

答案 0 :(得分:1)

myBalanceMethod是一种方法。

var myBalanceMethod = john.askTeller();

此行正在设置引用,这可能是此代码演示的内容。 myBalanceMethod在分配给john.askTeller()后成为一个函数。

为了进一步证明这一点,我可以做到以下几点:

function addNumbers(a, b) {
     return a + b;
}

var myRefObj = addNumbers;

alert(addNumbers(10,20));
alert(myRefObj(10,20));  // same answer

答案 1 :(得分:0)

john.askTeller()返回returnBalance,这是一个函数,然后分配给myBalanceMethod;因此myBalanceMethod是一个函数,可以使用()调用(您在returnBalance内调用john,这是无法访问的。

var myBalanceMethod = john.askTeller(); // myBalanceMethod is now a reference to returnBalance in john
var myBalance = myBalanceMethod(); // returnBalance is executed and value (7500) assigned to myBalance

答案 2 :(得分:0)

var myBalanceMethod = john.askTeller();

上面会将returnBalance方法分配给myBalanceMethod。请注意,它没有开括号和右括号()。意思是,它不会执行该功能,但只会分配。因此,myBalanceMethod现在是一个函数。请看下面的代码:

this.askTeller = function(){
  return returnBalance;
}

然后,

var myBalance = myBalanceMethod();

为myBalance分配了myBalanceMethod()返回的值。注意(),所以它执行函数。在Person构造函数中,它返回BankBalance,即7500.因此,myBalance被赋予7500值。

var returnBalance = function() {
  return bankBalance;

};