1、通过this调用
1 var obj = { 2 hello : function(){ 3 return "hello," + this.username; 4 }, 5 username : "Hans Gruber" 6 } 7 obj.hello(); //Hans Hans Gruber
2、在另一个函数中复制一份相同函数的引用
1 var obj2 = { 2 hello : obj.hello, 3 username : "Boo Radley" 4 }; 5 obj2.hello(); //"hello,Boo Radley"
解释:上述方法中,方法调用是由调用表达式自身来确定this变量的绑定,绑定到this变量的对象被称为调用接收者,表达式obj.hello()在obj对象中查找名为hello的属性,并将obj对象作为接收者,然后调用该属性。表达式obj2.hello()在obj2中查找名为hello的属性,恰巧正是obj.hello函数,但是接收者是obj2对象
3、一个普通的函数不能引用this变量
1 function hello(){ 2 return "hello," + this.username; 3 } 4 5 var obj1 = { 6 hello : hello, 7 username : "Gordon Gekko" 8 }; 9 obj1.hello(); //"hello ,Gordon Gekko" 10 11 var obj2 = { 12 hello : hello, 13 username : "Biff Tannen" 14 }; 15 obj1.hello(); //"hello ,Biff Tannen" 16 hello(); //"hello,undefined"
一个非方法的函数会将全局对象作为接收者,在这种情况下没有名为name的属性所以产生了undefined
4、通过构造函数
1 function User(name,passWordHash){ 2 this.name = name; 3 this.passWordHash = passWordHash; 4 } 5 var u = new User("sFalken","oooooooooo"); 6 u.name; //'sFalken'