方法调用模式:

当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。

//方法调用模式
var myObject = {
value: 0 ,
increment: function(inc){
this.value += (typeof inc === 'number') ? inc :1;
}
};
myObject.increment();
document.writeln(myObject.value);
myObject.increment(2);
document.writeln(myObject.value);

函数调用模式:

当一个函数非一个对象的属性时,那么它被当作一个函数来调用。当函数以此模式调用时,this被绑定到全局对象。这是语言设计上的一个错误。若语言设计正确,当内部函数被调用时,this应该仍然绑定到外部函数的this变量。解决方法是:如果 该方法定义一个变量并给它赋值为this,那个内部函数就可以通过那个变量访问到this。按约定,给那个变量命名为that。

//函数调用模式
function add(a,b){
return a+b;
}
myObject.doubled = function () {
var that = this;
document.writeln(that.value);
var helper = function () {
that.value = add(that.value,that.value);
}
helper();
}; myObject.doubled();
document.writeln(myObject.value);

构造器调用模式:

javascript是一门基于原型继承的语言。是无类别的。如果在一个函数前面带上new来调用,那么将创建一个隐藏连接到该函数的prototype成员的新对象,同时this将会被绑定到那个新对象上。同时new前缀也会改变return语句的行为,这里就不做更多说明了。

//构造器调用模式
var Quo = function (string){
this.status = string;
}
Quo.prototype.get_status = function(){
return this.status;
};
//构造一个Quo实例
var myQuo = new Quo("confused"); document.writeln(myQuo.get_status());

Apply调用模式:

因为javascript是一门函数式的面向对象语言,所以函数可以拥有方法。apply方法让我们构建一个参数数组并用其去调用函数。它也允许我们选择this的值。apply接收两个参数。第一个将被绑定给this的值。第二登上就是一个参数数组。

//Apply调用模式
var statusObject = {
status:'A-OK'
};
//statusObject 并没有继承自Quo.prototype,但我们可以在statusObject上调用
//用get_status 方法,尽管statusObject并没有一个名为get_status的方法。 var status = Quo.prototype.get_status.apply(statusObject);
document.writeln(status);
//不会改变原来的属性
document.writeln(myQuo.get_status());

总结:

javascript的this非常灵活也非常危险,开发者在使用this的时候,要清楚的知道this所指向的是哪个对象,如果明确了接下来要大量使用指向某个对象的this,最好的做法是将this赋值于类似that的这种变量,以免在下面使用子函数的时候混淆。

javascript函数的四种调用模式及其this关键字的区别的更多相关文章

  1. JS面向对象函数的四种调用模式

    函数的四种调用模式 概念 在 js 中,无论是函数, 还是方法, 还是事件, 还是构造器,...这些东西的本质都是函数 函数, 方法, 事件, 构造器,...只是所处的位置不同 这四种模式分别是 函数 ...

  2. 函数的四种调用模式.上下文调用.call.apply

    闭包:函数就是一个闭包,一个封闭的作用域;         返回函数,要返回多个函数就用一个对象封装一下,         立即执行函数+return 回调函数   JS动态创建的DOM,不会被搜索引 ...

  3. javascript中函数的四种调用模式详解

    介绍函数四种调用模式前,我们先来了解一下函数和方法的概念,其实函数和方法本质是一样,就是称呼不一样而已.函数:如果一个函数与任何对象关系,就称该函数为函数.方法:如果一个函数作为一个对象属性存在,我们 ...

  4. JS函数的四种调用模式

    函数在js中具有四种身份,分别为函数.方法.构造函数.apply或call调用 函数调用    函数调用模式中this指全局对象(window) var f1 = function() { alert ...

  5. javascript 函数的4种调用模式

    1. 函数模式 // this 指向 window 全局对象 2. 方法模式 // this 指向调用这个方法的对象 3. 构造函数模式 // this 指向 new 新创建出来的实例 4. 上下文模 ...

  6. js高级-函数的四种调用模式

    1.对象方法调用模式  方法内部的this指向当前调用者的对象d 定义类 (构造函数) function Dog (dogName){ //创建一个空对象   让空对象==this this.name ...

  7. javascript this 代表的上下文,JavaScript 函数的四种调用形式

    JavaScript 是一种脚本语言,支持函数式编程.闭包.基于原型的继承等高级功能.其中JavaScript 中的 this 关键字,就是一个比较容易混乱的概念,在不同的场景下,this会化身不同的 ...

  8. JavaScript (JS) 函数补充 (含arguments、eval()、四种调用模式)

    1. 程序异常 ① try-catch语法    测试异常 try-catch语法代码如下: try { 异常代码;     try中可以承重异常代码, console.log(“try”)  出现异 ...

  9. JavaScript高级之函数的四种调用形式

    主要内容 分析函数的四种调用形式 弄清楚函数中this的意义 明确构造函对象的过程 学会使用上下文调用函数 了解函数的调用过程有助于深入学习与分析JavaScript代码. 本文是JavaScript ...

随机推荐

  1. 10:django 模板语言

    Django的模板语言的目的是取得力量和易用性之间的平衡,与其他的模板语言相比,django模板语言显得更简单,更专一, django模板系统由模板,变量,过滤器,标签,注释等主要部分组成 模板 一个 ...

  2. www.verycd.com

    #encoding=utf-8 import urllib import urllib2 postdate = urllib.urlencode({'continueURL':'http://www. ...

  3. 机器学习方法(六):随机森林Random Forest,bagging

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 前面机器学习方法(四)决策树讲了经典 ...

  4. python类的使用与多文件组织

    多文件的组织 跨目录级导入模块 from ..xxfile import xxmodule #从上级目录中的xxfile中导入xxmodule import xxsub_dir.xxfile #从xx ...

  5. 【转载】Python测试框架doctest

    原文在这里 :Python测试框架doctest 先记录一下,直接复制粘贴后,排版是乱的,后续再弄.

  6. Sql Server递归查询(转)

    有如下数据表 假如我们要查询ID为003的数据的所有子节点我们可以使用CTE 递归查询完成... if OBJECT_ID('tb','N') is not null drop table tb; c ...

  7. CodeForces 732E Sockets

    贪心,优先队列. 将$s$按照从小到大的顺序扔进优先队列.从小的开始与电脑配对,如果找不到合适的电脑,那么再变小一次,直到找到与之配对的电脑或者作废. #pragma comment(linker, ...

  8. 一个菜鸟正在用SSH写一个论坛(1)

    嗯..搞定了注册和登录,说明我的SSH整合已经没有问题了,那么我就继续折腾了. 我的目的是用SSH框架写一个论坛(当然是功能最简单的那种),搞定了整合之后我打算先做出一些基本的功能,于是我就先简单的设 ...

  9. Python开发基础-Day23try异常处理、socket套接字基础1

    异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...

  10. Web会话安全分析工具ProxyStrike

    Web会话安全分析工具ProxyStrike   在Web应用中,客户端发出一次请求,服务器响应一次.这构成一个完整的会话.通过分析请求和响应的数据,可以发现Web应用存在的漏洞.Kali Linux ...