function Point(x, y){
this.x = x;
this.y = y;
this.moveTo = function(x, y){
this.x = x;
this.y = y;
}
}
var p1 = new Point(0, 0);
var p2 = {x: 0, y: 0};
p1.moveTo(1, 1);
p1.moveTo.apply(p2, [10, 10]);
在上面的例子中,我们使用构造函数生成了一个对象 p1,该对象同时具有 moveTo 方法;使用对象字面量创建了另一个对象 p2,我们看到使用 apply 可以将 p1 的方法应用到 p2 上,这时候 this 也被绑定到对象 p2 上。另一个方法 call 也具备同样功能,不同的是最后的参数不是作为一个数组统一传入,而是分开传入的。
复制代码 代码如下:
function Foo(){
//1.this引用的构造函数是argument.callee引用的对象
//说明是通过new操作符执行的构造函数
if(this.constructor==arguments.callee){
alert('Object Created');
}
//2.this是window, 那么是全局调用
if(this==window){
alert('normal call');
}
else{//3.否则是作为其他对象的方法来调用
alert('called by '+ this.constructor);
}
}
Foo();//全局函数调用
Foo.call(new Object());//作为一个object对象的成员方法来调用
new Foo();//被new操作符调用,执行对象构造
您可能感兴趣的文章: