ife task0003学习笔记(五):JavaScript面向对象
2015-05-07 22:14
162 查看
JavaScript 支持函数式编程、闭包、基于原型的继承等高级功能。在 Java 等面向对象的语言中,this 关键字的含义是明确且具体的,即指代当前对象。而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的,这就导致 JavaScript 中的 this 关键字有能力具备多重含义,可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。
一般而言,在Javascript中,this指向函数执行时的当前对象。当没有明确的执行时的当前对象时,this指向全局对象window.
In JavaScript, as in most object-oriented programming languages, this is a special keyword that is used within methods to refer to the object on which a > method is being invoked.By default, this refers to the global object.——jQuery Fundamentals (Chapter 2), by Rebecca Murphey
值得注意,该关键字在Javascript中和执行环境,而非声明环境有关。
The this keyword is relative to the execution context, not the declaration context.
在浏览器中setTimeout、setInterval和匿名函>数执行时的当前对象是全局对象window.
JavaScript中函数的调用有以下几种方式:作为对象方法调用、作为函数调用、作为构造函数调用、使用call和apply的调用
下面我们将按照调用方式的不同,分别讨论 this 的含义。
apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
如果把最后一行代码修改为:
运行结果就变成了1,证明了这时this代表的是对象o
参考资料:
http://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/index.html(IBM:深入浅出JavaScript this)
http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html(阮一峰:JavaScript中this的用法)
一、 this指向哪里?
一般而言,在Javascript中,this指向函数执行时的当前对象。当没有明确的执行时的当前对象时,this指向全局对象window.
In JavaScript, as in most object-oriented programming languages, this is a special keyword that is used within methods to refer to the object on which a > method is being invoked.By default, this refers to the global object.——jQuery Fundamentals (Chapter 2), by Rebecca Murphey
值得注意,该关键字在Javascript中和执行环境,而非声明环境有关。
The this keyword is relative to the execution context, not the declaration context.
在浏览器中setTimeout、setInterval和匿名函>数执行时的当前对象是全局对象window.
JavaScript中函数的调用有以下几种方式:作为对象方法调用、作为函数调用、作为构造函数调用、使用call和apply的调用
下面我们将按照调用方式的不同,分别讨论 this 的含义。
二、this的不同含义
1.作为对象方法调用
函数还可以作为某个对象的方法调用,这时this就指这上级对象var point = { x : 0, y : 0, moveTo : function(x, y) { this.x = this.x + x; this.y = this.y + y; } }; point.moveTo(1, 1)//this 绑定到当前对象,即 point 对象上级对象。
2、作为函数调用
此时this 绑定到全局对象function makeNoSense(x) { this.x = x; } makeNoSense(5); x;// x 已经成为一个值为 5 的全局变量
3、作为构造函数调用
new关键字后的构造函数中的this指向用该构造函数构造出来的新对象function Person(__name){ this.name = __name;//这个this指向用该构造函数构造的新对象,这个例子是Bob对象 } Person.prototype.show = function(){ alert(this.name); } var Bob = new Person("Bob"); Bob.show(); //Bob
4、使用call和apply的调用
apply和call能够强制改变函数执行时的当前对象,让this指向其他对象。因为apply和call较为类似,所以我们以apply为例:apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。var x = 0; function test(){ alert(this.x); } var o={}; o.x = 1; o.m = test; o.m.apply(); //0
apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
如果把最后一行代码修改为:
o.m.apply(o); //1
运行结果就变成了1,证明了这时this代表的是对象o
参考资料:
http://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/index.html(IBM:深入浅出JavaScript this)
http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html(阮一峰:JavaScript中this的用法)
相关文章推荐
- 领悟 JavaScript 中的面向对象
- javascript面向对象之访问对象属性的两种方式分析
- 一段代码详解JavaScript面向对象
- Javascript之面向对象--方法
- javascript面向对象实现java常用的1StringBuffer,Map,Collection,List,Set
- (12)javascript 面向对象 理解对象
- javascript面向对象5
- node.js学习之路(二)之“深入理解面向对象的JavaScript”
- 面向对象的JavaScript基本知识指南大全
- JavaScript面向对象——深入理解默认的继承方式原型链
- javascript面向对象之我解
- javaScript面向对象
- JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链
- JavaScript高级 面向对象(10)--onload与jq中ready的区别
- javascript面向对象与封装
- javascript面向对象
- (深夜课堂)Javascript 面向对象的程序设计
- JavaScript面向对象的支持
- 令人惊奇的JavaScript面向对象(三)
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(一)