您现在的位置:首页 > 技术 > JavaScript知识笔记8:函数(下)

JavaScript知识笔记8:函数(下)

函数的调用应该才是函数产生的根本,减少我们多次去执行相同的代码。调用函数式一个控制权传递的过程,这个过程中我们将定义的参数传递给新的函数,新函数在接收参数的同时还会接收两个附加参数:this和arguments。

2016年08月

透明伽然

this,这是一个面向对象的概念,但是和其他语言不同的是JSthis甚至可以理解为一个动态表达式,结合对作用域的理解去研究this应该是唯一正解。

函数的调用应该才是函数产生的根本,减少我们多次去执行相同的代码。调用函数式一个控制权传递的过程,这个过程中我们将定义的参数传递给新的函数,新函数在接收参数的同时还会接收两个附加参数:thisarguments。下面针对几种形式的调用,理解this的差异。

1.  作为函数被调用。this被绑定到全局对象。

输出结果:

输出结果:

作为函数被调用,无论是在全局作用域内调用还是在函数内调用,this都指向全局对象window

2.  作为方法被调用。这种模式类似于大多数语言:方法是依附于对象而存在的,这里JS函数被保存在对象的一个属性上,那么自然this就指向了这个依附对象。但是强调一点,在JS中函数也是一种对象,这是函数式编程语言的一大特性。

输出结果:

say()被绑定在person对象上,对于对象属性的调用,通常我们使用”.”,同样作为属性访问也可以使用”[]”:

输出结果:

这里的方法say()使用this访问自己所属的对象,从对象中取值。JS支持这样的函数调用模式,其实也是为面向对象的编程奠定了最坚实的基础。这不由得之前分享的关于JS的一篇文章“从喜欢到爱”,其中我将自己塑造成一个JS对象zz,回顾一系列代码,最为重要的就是study()think()say()方法,正因为拥有它们才完美了我的一生。这些方法都是独立存在的不属于任何一个人,但是可以被任何人拥有。

3.  对于被实例化的function,我们称之为构造函数,及使用new关键字调用的function,对于它们来说,this会被改变,指向实例。

可以看出,通过创建构造函数的实例,使得this的指向改变,指向了实例本身。

4、每一个函数对象在创建的时候,都会自动添加一个prototype属性,prototype其实是一个指针,指向这个函数的原型对象。通过prototype给这个函数对象的原型对象添加属性,在实例化函数对象后,可以通过this来访问原型对象上的属性。

5、通常是我们创建函数对象的时候,会给构造函数对象直接添加与原型对象上同名的属性,原型对象中的属性或方法会被隐藏,你只会访问到构造函数中的属性或方法。使用new关键字创造的实例调用了构造函数的属性和方法。

6、通过Object.create创建函数对象实例,而不使用new关键字,也就是说它不会去调用构造函数。使用Object.create创造的实例调用了原型对象的属性和方法。

函数里面的this其实相对比较好理解,如果我们在一个函数里面使用this,需要注意的就是我们调用函数的方式,如果是正常的方式调用函数,this指代全局的this,如果我们加一个new,这个函数就变成了一个构造函数,我们就创建了一个实例,this指代这个实例,这个和其他面向对象的语言很像。


订阅

欢迎订阅AnyForWeb出版物
欢迎订阅伽然出版物

栏目推荐

栏目推荐
JavaScript知识笔记9…

在jQuery源码中我们经常能看见各式各样…

栏目推荐
JavaScript知识笔记8…

函数的调用应该才是函数产生的根本,减…

栏目推荐
JavaScript知识笔记6…

在JS中使用操作符主要用来执行数学、相…

栏目推荐
JavaScript知识笔记5…

周知JS语法相对简单,语言结构简单,这…

栏目推荐
JavaScript知识笔记4…

JS相对于那些所谓重量级语言(C++、C#…

栏目推荐
JavaScript知识笔记3…

Javascript中this是一个指针概念,它表…

栏目推荐
JavaScript知识笔记2…

常见的变成语言Java、C#、C++等,同样…

AnyFroWebUED  

版权所有 © 2009-2016  沪ICP备14026814号-10

 

 

返回

很抱歉!

您现在还没有开通阅读权限,如有疑问,请联系我们。

联系电话:021-52047186

返回