Effective Javascript 阅读笔记(4)-JavaScript 三种不同的使用模式
2018-01-10 14:54
549 查看
在javascript中有三种不同的使用模式,函数调用,方法调用,通过构造函数使用。
此段函数的表现与行为一致,调用hello 函数并且将参数传入。
javascript 中即,对象的属性为函数
var 对象 = {
属性名:function() {}
}
我们可以看到,在上述的例子中通过this变量访问了obj的属性。这是如何实现的?
在方法调用过程中,绑定的this变量成为接收者。表达式obj.hello()在obj对象中查找为hello的属性,并将obj对象作为接收者,然后调用该属性。通常,通过某个对象调用方法则将查找该方法并将该方法作为接收者。我们可以通过下面的例子来协助理解。
但是需要注意一点,普通的函数是不能直接引用this变量的。
与函数调用不同的是,构造函数调用将一个全新的对象作为this变量的值,并隐式返回这个新对象作为调用结果。
三种方式在接收者上有明显的不同之处
函数调用将全局作为接收者,一般很少使用函数调用来调用方法。
方法调用将被查找方法属性的对象作为调用接收者。
构造函数需要通过new运算符调用,并产生一个新的对象作为接收者。
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运算符调用,并产生一个新的对象作为接收者。
相关文章推荐
- [Effective JavaScript 笔记]第21条:使用apply方法通过不同数量的参数调用函数
- [Effective JavaScript 笔记]第68条:使用promise模式清洁异步逻辑
- Android 高级UI设计笔记24:Android 夜间模式之 WebView 实现白天 / 夜间阅读模式 (使用JavaScript)
- 大教堂和集市--两种不同的软件开发模式 论文阅读笔记
- [Effective JavaScript 笔记] 第13条:使用立即调用的函数表达式创建局部作用域
- 全端Web开发 使用JavaScript与Java 阅读笔记
- JavaScript高级程序设计之面向对象的程序设计之创建对象之组合使用构造函数模式和原型模式 第6.2.4讲笔记
- Javascript模式阅读笔记 · 基本技巧(一)
- [Effective JavaScript 笔记]第25条:使用bind方法提取具有确定接收者的方法
- [Effective JavaScript 笔记]第3章:使用函数--个人总结
- [Effective JavaScript 笔记]第18条:理解函数调用、方法调用及构造函数调用之间的不同
- [Effective JavaScript 笔记]第30条:理解prototype、getPrototypeOf和__ptoto__之间的不同
- js 笔记 第一章在html中使用<javascript>标签 以及 html文档模式
- [Effective JavaScript 笔记]第26条:使用bind方法实现函数的柯里化
- [Effective JavaScript 笔记]第22条:使用arguments创建可变参数的函数
- 《高性能网站建设指南》阅读笔记_规则8- 使用外部javascript和css
- [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符
- More Effective C++ 阅读笔记(四)-- 避免使用隐式类型转换
- Javascript模式阅读笔记 · 基本技巧(三)
- [Effective JavaScript 笔记]第24条:使用变量保存arguments对象