您的位置:首页 > Web前端 > JavaScript

Effective Javascript 阅读笔记(4)-JavaScript 三种不同的使用模式

2018-01-10 14:54 549 查看
在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运算符调用,并产生一个新的对象作为接收者。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐