首页 > 技术文章 > 函数的调用

zhanghuiyun 2016-09-18 10:28 原文

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'

 

推荐阅读