javascript中的call和apply方法介绍
/*构造函数模式*/
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
sayName = function() {
alert(this.name);
};
}
var personThis=new Person("thisLff", 24, "doctor");//①当构造函数来使用
//构造函数对象都有一个constructor(构造函数)属性,该属性指向Person
alert(personThis.constructor==Person);//true
/*②作为普通函数调用*/
Person("11",11,"11");//添加到windows
windows.sayName();//"11"
/*③在另一个对象的作用域中调用*/
var o=new Object();
Person.call(o,"22",22,"22");//第一个参数是o,说明应该赋予Person中的 this 关键字值是o
o.sayName();//"22"
使用call()和apply()方法主要是为了修改函数运行时的this指针
call() 方法
call() 方法是与经典的对象冒充方法最相似的方法。它的第一个参数用作 this 的对象。其他参数都直接传递给函数自身。例如:
function sayColor(sPrefix,sSuffix) { alert(sPrefix + this.color + sSuffix); }; var obj = new Object(); obj.color = "blue"; sayColor.call(obj, "The color is ", "a very nice color indeed.");
在这个例子中,函数 sayColor() 在对象外定义,即使它不属于任何对象,也可以引用关键字 this。对象 obj 的 color 属性等于 blue。调用 call() 方法时,第一个参数是 obj,说明应该赋予 sayColor() 函数中的 this 关键字值是 obj。第二个和第三个参数是字符串。它们与 sayColor() 函数中的参数 sPrefix 和 sSuffix 匹配,最后生成的消息 "The color is blue, a very nice color indeed." 将被显示出来。
apply() 方法
apply() 方法有两个参数,用作 this 的对象和要传递给函数的参数的数组。例如:
function sayColor(sPrefix,sSuffix) { alert(sPrefix + this.color + sSuffix); }; var obj = new Object(); obj.color = "blue"; sayColor.apply(obj, new Array("The color is ", "a very nice color indeed."));
这个例子与前面的例子相同,只是现在调用的是 apply() 方法。调用 apply() 方法时,第一个参数仍是 obj,说明应该赋予 sayColor() 函数中的 this 关键字值是 obj。第二个参数是由两个字符串构成的数组,与 sayColor() 函数中的参数 sPrefix 和 sSuffix 匹配,最后生成的消息仍是 "The color is blue, a very nice color indeed.",将被显示出来。