JavaScript 方法调用模式和函数调用模式

这两天在读《JavaScript语言精粹》关于第4章函数调用的几种模式琢磨了半天。

这里就说一下方法调用模式函数调用模式。


方法调用模式:

当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。如果调用表达式包含一个提取属性的动作(a.name或a[name]),那么他就是被当做一个方法调用。

1 var myObject = {
2     value:1,
3     double:function(){ //double是myObject对象的一个方法
4         this.value = this.value*2;
5     }
6 };
7 myObject.double(); //2

函数调用模式:

当一个函数并非一个对象的属性时,那么他就是被当做一个函数来调用的:

此时要注意,以此模式调用函数时,this被绑定到全局对象。

 1 var myObject = {
 2     value:1
 3 };
 4 myObject.double =function () {
 5     var helper = function () {  //helper不是对象的属性,因此this指向全局对象Window
 6         this.value = this.value*2;
 7     }
 8     helper();
 9 } ;
10 myObject.double(); //1,value的值不会发生改变

我们可以为该方法double定义一个变量,并赋值为this,那么内部函数就可以通过那个变量访问到this。按照约定,我们把那个变量命名为that:

 1 var myObject = {
 2     value:1
 3 };
 4 myObject.double = function () {
 5     var that = this;    //定义变量that,并给它赋值为this
 6     var helper = function () {
 7         that.value = that.value*2;
 8     }
 9     helper();
10 }
11 myObject.double(); //2,由于间接的访问了this,value最终发生了改变
时间: 2024-10-10 16:26:34

JavaScript 方法调用模式和函数调用模式的相关文章

第164天:js方法调用的四种模式

js方法调用的四种模式 1.方法调用模式 1 function Persion() { 2 var name1 = "itcast", 3 age1 = 19, 4 show1 = function() { 5 console.log(this.name); 6 }; 7 8 return { 9 age : age1, 10 name : name1, 11 show : show1 12 }; 13 } 14 15 var p = new Persion(); 16 p.show(

javascript this 关键字以及四种函数调用模式

最近在学习javascript ,被js中的this关键字搞得晕头转向,都不知道这个东西到底是干什么的,不同的地方所指的对象又不一样.在查询了很多的资料以后,终于有了一些眉目了. this的定义:在javascript中,上下文对象就是this指针,即被调用函数所处的环境,上下文对象的作用是一个函数内部引用调用它的对象本身. 上面就是javascript中this关键字的定义,单纯的理解来说还是很好理解的,但是真正到用的时候发现又是另外一回事了. 说到this的用法,就要谈到到this的作用域,

js中的4种函数调用模式

javascript一共有4种调用模式:函数调用模式.方法调用模式.构造器调用模式和间接调用模式. [1]函数调用模式 当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用的.对于普通的函数调用来说,函数的返回值就是调用表达式的值 function add(x,y){ return x+y; } var sum = add(3,4); console.log(sum)//7 使用函数调用模式调用函数时,非严格模式下,this被绑定到全局对象:在严格模式下,this是undefined

js 四种函数调用模式

看js语言精粹,还在慢慢啃,啃到了一些之前没想到过的就在博客上记录一下吧.号外一下,工作室的汉子有时候太他妈没有节操了!!你们没节操就算了,当着我的面,这都什么鬼(崩溃中),不说这些没用的,进入正题吧. 调用一个函数会暂停当前函数的执行,传递控制权和参数给新函数.那么新函数会有哪些个参数呢,这就涉及到上节闭包里讲到的活动对象了,每个函数除了声明时定义的形参,还有两个this,arguments.this是个灰常重要的参数咯,它的值取决于调用的模式.在js中一共有4中调用模式:方法调用模式,函数调

js函数调用模式

1.函数调用 调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数.除了函数声明时定义的形参,每个函数还接受两个附加的参数:this和arguments(arguments并不是一个真正的数组,它拥有length属性,但它缺少数组的所有方法).参数this在面向对象编程中非常重要,它的值取决于调用的模式.在js中一共有四种调用模式:方法调用模式.函数调用模式.构造器调用模式和apply调用模式.这些模式在如何初始化关键参数this上存在差异.arguments的个数取决于函数定义时候形参的

JavaScript函数调用模式

1.方法调用模式: var myObj = { value : 0; increment:function(inc){ this.value += typeof inc === 'number' ? inc : 1; } } myObj.increment(); console.info(myObj.value); // 1 2.函数调用模式: 当一个函数并非一个对象的属性时,那么它被当做一个函数来使用,这时 this 被绑定到全局对象,要解决这个问题,需要在内部重新命名一个变量.获取内部函数的

启动Activity时的方法调用(应用层)(MVC模式)

一,从桌面启动应用 从桌面启动一个应用其实质也是从一个Activity中启动另一个Activity,比如官方的实例代码中: android/platform_packages_apps_launcher /** * 点击桌面图标启动Intent指向的Activity * * @param v The view representing the clicked shortcut. */ public void onClick(View v) { Object tag = v.getTag();//

多线程场景设计利器:分离方法的调用和执行——命令模式总结

前言 个人感觉,该模式主要还是在多线程程序的设计中比较常用,尤其是一些异步任务执行的过程.但是本文还是打算先在单线程程序里总结它的用法,至于多线程环境中命令模式的用法,还是想在多线程的设计模式里重点总结. 实现思路 其实思路很简单,就是把方法的请求调用和具体执行过程分开,让客户端不知道该请求是如何.何时执行的.那么如何分开呢? 其实没什么复杂的,就是使用 OO 思想,把对方法的请求封装为对象即可,然后在设计一个请求的接受者对象,当然还要有一个请求的发送者对象,请求本身也是一个对象.最后,请求要如

Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式

IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 delegate 方法使我们可以做到让 js 需要调用时,通知 native.在 native 执行完相应调用后,可以用stringByEvaluatingJavaScriptFromString 方法,将执行结果返回给 js.这样,就实现了 js 与 native 代码的相互调用.具体让 js 通知 na