`

JavaScript四种调用模式

 
阅读更多
ref:《javascript语言精髓》第四章#函数#调用

方法调用模式:
当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。
如果一个调用表达式包含一个属性存取表达式("."或"[]"),那么它被当作一个方法来调用。
var myObject = {
	value: 0 ;
	increment: function(inc){
		this.value += typeof inc == 'number' ? inc : 1;
	}
};
myObject.increment();
document.writeln(myObject.value);  // 1

myObject.increment(2);
document.writeln(myObject.value);  // 3

方法可以使用this去访问对象,所以它能从对象中取值或修改该对象。this到对象的绑定发生在调用的时候。
通过this可取的它们所属对象的上下文的方法称为公共方法。

函数调用模式:
var sum = add(2,3) 

当函数以此模式调用时,this被绑定到全局对象。这是语言设计上的一个错误(书作者说的)。
当内部函数(在内部)被调用时,this应该仍然绑定到外部函数的this变量。
这个设计错误的后果是方法不能利用内部函数来帮助它工作。
因为内部函数的this被绑定了错误的值,所以不能共享该方法对对象的访问权。
解决方案:
如果该方法定义一个变量并给他赋值为this,那么内部函数就可以通过这个变量访问到this。
myObject.double = function(){
	var that = this;
	
	var helper = function (){
		that.value = add(that.value,that.value);
	};
	helper(); // 函数调用模式调用helper
};
// 方法调用模式调用double
myObject.double();
document.writenln(myObject.getValue());


构造器调用模式
JavaScript基于原型继承的语言。
如果在一个函数前面带上new来调用,那么将创建一个隐藏链接到该函数的prototype成员的新对象,
同时this将绑定到新对象上。
// 旧模式:基于类的对象构建语法
// 构造器(一般大写),带status属性
var  Cons = function(status){
	this.status = status;
};

// 给Cons一个getStatus的公共方法
Cons.prototype.getStatus = function(){
	return this.status;
}

// 构造Cons实例
var myObject = new Cons("normal");
myObject.getStatus();


Apply/Call调用模式:
function print(a, b, c, d){
	alert(a + b + c + d);
}

function example(a, b , c , d){
//用call方式借用print,参数显式打散传递
print.call(this, a, b, c, d);
//用apply方式借用print, 参数作为一个数组传递,
//这里直接用JavaScript方法内本身有的arguments数组
print.apply(this, arguments);
//或者封装成数组
print.apply(this, [a, b, c, d]);
}

apply/call方法介绍参考
http://www.cnblogs.com/fighting_cp/archive/2010/09/20/1831844.html
分享到:
评论

相关推荐

    JavaScript四种调用模式和this示例介绍

    JavaScript有四种调用模式,方法调用模式,函数调用模式,构造器调用模式和apply调用模式。这些模式在初始化关键参数this上存在差异。 方法调用模式:当一个函数被保存为对象的一个属性时,我们称它为一个方法,当...

    JS 四种函数调用模式

    在 JS 中,有四种主要的函数调用模式,分别是:普通函数调用、方法调用、构造函数调用和apply/call调用。下面我们将详细探讨这些调用模式。 1. **普通函数调用**: 这是最常见的情况,函数作为一个独立的实体被执行...

    JavaScript中函数对象调用模式总结

    JavaScript中的函数对象调用模式是编程中至关重要的概念,它涉及到函数作为一等公民、作用域、闭包、原型链等多个核心知识点。这篇博客通过深入分析JavaScript中的函数调用模式,帮助开发者更好地理解和掌握这些概念...

    javascript调用delphi中的函数

    标题“javascript调用delphi中的函数”涉及到的技术领域是跨语言通信,具体是JavaScript与Delphi之间的交互。这种交互通常发生在Web应用程序与桌面应用程序的集成,或者在浏览器扩展和本地资源之间。以下是对这一...

    JavaScript设计模式+JavaScript模式+JavaScript异步编程

    设计模式和异步编程是提升JavaScript代码质量和效率的关键。以下将详细介绍这三本书所涵盖的知识点: 1. **JavaScript设计模式**: 设计模式是软件工程中经过实践验证的、解决常见问题的有效方法。在JavaScript中...

    Javascript 函数的四种调用模式

    Javascript 函数的四种调用模式 1 函数模式  最普通的函数调用 // 声明式函数 function fn1 () { console.log(this); } // 函数表达式函数 var fn2 = function() { console.log(this); }; // 调用 函数中this...

    javascript函数的四种调用模式

    本文主要介绍了四种常见的函数调用模式:函数调用模式、方法调用模式、构造函数调用模式以及上下文调用模式,重点讨论了每种模式下`this`的指向以及返回值。 首先,函数调用模式是最基础的调用方式。在这种模式下,...

    JavaScript设计模式.pdf

    JavaScript设计模式.pdf JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体...

    Javascript 设计模式 电子书

    5. 发布/订阅模式:这是观察者模式的变体,在此模式中,发布者和订阅者之间不会直接相互调用,而是通过一个中间层进行通信。在前端开发中,这可以用来解耦模块之间的直接依赖关系。 6. 适配器模式:适配器模式允许...

    javascript调用exe文件,弹出系统软键盘

    但通过一些技术手段,我们可以实现JavaScript调用exe文件的功能,进而实现弹出系统软键盘的需求。下面将详细介绍这个过程。 首先,为了在JavaScript中调用exe文件,我们需要借助一些浏览器扩展API或者服务器端的...

    Javascript 严格模式详解

    在JavaScript中,**严格模式**(strict mode)是ECMAScript 5引入的一种新特性,旨在改善语言的一些不足,提高代码质量和安全性,以及为未来的JavaScript版本铺平道路。严格模式的启用不仅能够帮助开发者避免一些...

    JavaScript函数的4种调用方法详解

    函数有四种调用模式,分别是:函数调用形式、方法调用形式、构造器形式、以及apply形式。这里所有的调用模式中,最主要的区别在于关键字 this 的意义,下面分别介绍这个几种调用形式。 本文主要内容: 1.分析函数的...

    JavaScript设计模式Demo

    JavaScript设计模式是编程实践中的一种重要概念,它是为了在JavaScript环境中编写更加高效、可维护和可扩展的代码而形成的一套通用解决方案。这个"JavaScript设计模式Demo"可能包含了各种常见的设计模式示例,如单例...

    浅析JavaScript函数的调用模式

    JavaScript函数的调用模式是该语言中重要的基础概念之一,理解这些模式可以帮助开发者更有效地编写代码和解决实际问题。本文将详细介绍方法调用模式、构造器调用模式以及apply/call调用模式。 首先,介绍方法调用...

    Javascript 设计模式系统讲解与应用视频资源地址.7z

    JavaScript设计模式是编程实践中的一种重要思想,它提供了一套经过时间考验的最佳实践,用来解决常见的编程问题和提高代码的可维护性、可扩展性和可复用性。在JavaScript这种动态类型的脚本语言中,设计模式尤其重要...

    JavaScript设计模式中的单例模式和观察者模式.docx

    ### JavaScript设计模式详解:单例模式与观察者模式 #### 一、单例模式 **定义**:单例模式是一种常用的软件设计模式,其目的是确保某个类只有一个实例,并且能够提供一个全局访问点来访问该实例。在JavaScript中...

Global site tag (gtag.js) - Google Analytics