不同的函数调用方式
方法调用模式
一个函数B是另一个对象A的属性时,通过A.B来调用函数B的方式我们称之为方法调用模式
A= {
a:'a vairalbe',
B: function() {
//
}
}
A.B();
这种调用模式中,B函数中的this指向调用它的对象,A
函数调用模式
若函数B并非是哪个对象的属性,单纯通过B()来调用,则该方法为函数调用。
如
var A = function ()
{
var a = 'a variable';
var B = function() {
///
};
B();
};
A();
在这种情况下,B中的this并不指向其外层函数this变量,而是指向全局对象。这是js语言设计上的一个错误,会为开发带来很多麻烦,有一种方法,来改善这一问题。我们创建一个变量,来手动指向外层函数的this变量。
myObject.double = function() {
var that = this;//解决方法
var helper = function() {
that.value = add(that.value, that, value);
};
helper();
};
myObject.double();
document.writeln(myObject.value);//6
构造器调用模式
由于很多人还是习惯基于类的对象,而js是基于原型的对象,因此js提供了一套类似于基于类的语言的对象构建语法,通过new 关键字创建对象。Apply调用模式
每个函数都拥有一个自己的apply方法。可通过该方法调用指定函数以及制定this指向的对象。
减少全局变量污染
js中可以随意定义全局变量,但由于它会削弱程序的灵活性,建议尽量少的使用。
其实可以尽量将需要声明为全局变量的变量统一放在一个唯一的全局变量中,这样在满足了需求的同时,还减少了全局变量的使用。
var MYAPP = {};//唯一的全局变量
MYAPP.stooge = {
firstName: 'joe',
lastName: 'Howard'
};
MYAPP.flight = {
airline: 'Oceanic',
number: 815,
departure: {
IATA:'SYD',
TIME: '2004-09-22 14:55',
}
};