关于this, java类方法中的this必定是其自身或子类对象;JavaScript函数中的this可以是任何对象。其原因是,JavaScript的function是一种内置对象,可以被赋值给一个变量或对象的属性。
function Person(){}
Person.prototype.sayHi = function(){ console.log("My constructor is "+this.constructor); }function Fish(){}Fish.prototype.sayHi = Person.prototype.sayHi;var aPerson = new Person(), aFish = new Fish(); aPerson.sayHi(); aFish.sayHi();
===output===
My constructor is function Person(){} My constructor is function Fish(){}
以上代码表明,this取决于运行时调用函数的对象。若想指定this,可以使用function.call, function.apply.
aFish.sayHi.call(aPerson);
function.apply与call的区别是,apply可以传递两个参数,第一个参数为赋给this的对象,,第二个参数必须为数组。===output===My constructor is function Person(){}
参考: http://www.cnblogs.com/PengNian/articles/838215.html
NOTE:
function.call(null 或 undefined);//此时this为全局变量,具体为什么取决于js的执行环境:浏览器为window, AdobeAIR为global。'use strict'模式下this将为null/undefined。