在javascript中有三种不同的使用模式,函数调用,方法调用,通过构造函数使用。
1.函数调用
function hello (username) {
return "hello, " + username;
}
hello("han crewn");//" hello, han crewn"
此段函数的表现与行为一致,调用hello 函数并且将参数传入。
2.方法调用
javascript 中即,对象的属性为函数
var 对象 = {
属性名:function() {}
}
var obj = {
hello: function() {
return "hello, " + this.username;
},
username: 'han crewn'
};
obj.hello();//" hello, han crewn"
我们可以看到,在上述的例子中通过this变量访问了obj的属性。这是如何实现的?
在方法调用过程中,绑定的this变量成为接收者。表达式obj.hello()在obj对象中查找为hello的属性,并将obj对象作为接收者,然后调用该属性。通常,通过某个对象调用方法则将查找该方法并将该方法作为接收者。我们可以通过下面的例子来协助理解。
var obj2 = {
hello: obj.hello,
username: 'boo ranll'
};
obj2.hello();//" hello, boo ranll"
但是需要注意一点,普通的函数是不能直接引用this变量的。
function hello() {
return "hello, " + this.username;
},
var obj = {
hello: hello,
username: 'han crewn'
};
var obj2 = {
hello: hello,
username: 'boo ranll'
};
obj.hello();//" hello, han crewn"
obj2.hello();//" hello, boo ranll"
hello();//"hello, undefined"
3.构造函数使用
function User (name, password) {
this.name = name;
this.password = password;
}
//使用new 操作符来调用
var u = new User('user', '7eywuca');
u.name;//'user'
与函数调用不同的是,构造函数调用将一个全新的对象作为this变量的值,并隐式返回这个新对象作为调用结果。
三种方式在接收者上有明显的不同之处
- 函数调用将全局作为接收者,一般很少使用函数调用来调用方法。
- 方法调用将被查找方法属性的对象作为调用接收者。
- 构造函数需要通过new运算符调用,并产生一个新的对象作为接收者。