在处理Javascript中的方法时,为什么不设置全局变量?

时间:2015-04-10 03:28:41

标签: javascript global-variables

var setAge = function (newAge) {
  this.age = newAge;
};

var bob = new Object();
bob.age = 30;

bob.setAge = setAge; 

bob.setAge(50);

基本上,代码以更改年龄属性的方法开头,然后方法后跟一个“bob”对象,最后有一个代码使用该方法来改变bob的属性(年龄)。

我有两个问题:bob.setAge = setAge; (代码中的倒数第二行)

  1. 通过将setAge设置为等于bob.setAge,是否将setAge设置为全局变量,等于bob.setAge?

  2. 在bob.setAge中,bob是变量,setAge是方法。我认为在写出像bob.setAge这样的东西时,句点之前的单词引用了对象( susan .age),并且句点之后的单词引用了一个属性(susan。年龄)。 javascript如何识别bob.setAge中的setAge引用方法而不是属性?

2 个答案:

答案 0 :(得分:2)

  

通过将setAge设置为等于bob.setAge,不会将setAge设置为全局变量,等于bob.setAge?

不,你正在做相反的事情

  

在bob.setAge中,bob是变量,setAge是方法。我认为在写出像bob.setAge这样的东西时,句点之前的单词引用了对象(susan.age),而句点之后的单词引用了属性(susan.age)。 javascript如何识别bob.setAge中的setAge引用方法而不是属性?

JS没有&#34;认识到它&#34; (它不区分&#34;他们&#34;因为&#34;他们&#34;是相同的事情):bob.setAge包含对你可能(并且你做)调用的函数的引用< / p>

答案 1 :(得分:1)

&#13;
&#13;
var setAge = function (newAge) {
  console.log(this);
  this.age = newAge;
};

var bob = new Object();
bob.age = 30;

bob.setAge = setAge; 

console.log('Calling set age as bob\'s method');
bob.setAge(50);  //this should be bob... 

//above is similar to the following
console.log('Calling set age with bob as scope');
setAge.call(bob, [ 50 ]);

console.log('Calling set age as a function with no context');
setAge(100);  //this should be global object since the function is called without any context / scope. In this case, it's the window object since we are running in a browser.  In node, it will be node itself, etc.
&#13;
&#13;
&#13;