一:函数调用
构成函数主体的JavaScript代码在定义之时并不会执行,只有调用该函数时,他们才会执行。有四种方法来调用JavaScript函数:
a:作为函数
b:作为方法
c:作为构造函数
d:通过他们的call()和apply()方法间接调用。
二:作为函数调用
function printprops(o){ for(var p in o){ console.log(p+": "+o[p]+" ") } } printprops({x:1});
三:作为方法调用
当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this本绑定到该对象。如果调用表达式包含一个提取属性的动作(即包含一个。点表达式或【】下标表达式),那么它就是被当做一个方法来调用。
var calculator = { operand1:1, operand2:2, add:function () { this.result = this.operand1+this.operand2 } }; calculator.add();/*这个方法调用来计算1+2的值*/ alert(calculator.result);/*3*/
四:this在函数中的指向
this是一个关键字,不是变量,也不是属性名。JavaScript的语法不允许给this赋值。和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。如果嵌套哈数作为方法调用,其this的值就是指向调用它的对象。如果嵌套函数作为方法调用,其this的值不是全局对象就是undefined。如果你想访问这个外部函数的this值,需要将this的值保存在一个变量里,这个变量和内部函数都在同一个作用域内。通常使用self来保存this。
var o ={ /*对象o*/ m:function () { /*对象中的方法m*/ var self = this; /*将this的值保存在一个变量中*/ console.log(this === self); /*输出true,this就是这个对象o*/ f(); /*调用辅助函数*/ function f() { /*定义一个嵌套函数*/ console.log(this === o); /*false:this的值是全局对象*/ console.log(self === o); /*true:self指外部函数的this值*/ } } }; o.m();
五:构造函数调用
如果函数或者方法调用之前带有关键字new,那么背地里将会创建一个连接到该函数的prototype成员的新对象,同时会将this绑定到那个对象上。
/*创建一个名为Quo的构造器函数,它构造一个带有status属性的对象。*/ var Quo = function (string) { this.status = string; }; /*给Quo的所有实例提供一个get_status的公共方法。*/ Quo.prototype.get_status = function () { return this.status; }; /*构造一个Quo实例*/ var myQuo = new Quo("confused"); /*打印*/ document.write(myQuo.get_status());