文档章节

Javascript函数4种调用模式

GZhiDao
 GZhiDao
发布于 2016/06/28 00:10
字数 591
阅读 27
收藏 6
点赞 0
评论 0
// 函数
		//编程,就是将需求分解变成一组函数与数据结构的技能
		//javascript是一门基于原型继承的语言;
		//javascript 是一门函数式的面向对象编程语言,所有函数开源拥有方法
	// 函数对象
		/***
		1.对象字面量产生的对象连接到Object.prototype
		2.函数对象连接到Function.prototype
		3.每个函数创建时都会两个隐藏属性:函数的上下文和实现函数行为的代码
		4.函数对象在创建时会配有一个prototype属性,它的值是一个拥有constructor属性且值为该函数的对象***/
// 函数字面量
var add = function(a,b){ //匿名函数
	return a+b;
}

// 调用
/*4种调用模式:
	方法模式调用、函数调用模式、构造器调用模式、apply调用模式
	(这些模式在如何初始化关键参数this上存在差异)

	*/
//1.方法调用模式:
var myproject = {
	value:0,
	increamt:function(ico){
		if(ico === 'number')  this.value += 1;
		else this.value += ico;
	}
	//this从对象中取值或修改,this可取得所属对象的上下文的方法
	//称为公共方法
}
myproject.increamt(3);
console.log(myproject.value);
//2.函数调用模式:
	//函数不是对象的属性时,就被当作一个函数来调用,以此模式调用函数时,this被绑定到全局对象
	//解决方法:that
	myproject.double = function(){
		var that = this; //解决了全局对象的问题
		var helper = function(){
			that.value = add(that.value,that.value);
		};
		helper();//函数形式调用helper
	};
	myproject.double();
	document.write(myproject.value);//6
//3.构造器调用模式(不推荐):
	//如果函数前面带上 new 来调用,那么会创建一个连接到该函数的prototype成员新对象,同时this会被绑定到那个新对象上。
	var Quo = function (string){
		this.status = string;
	}
	Quo.prototype.get_status = function (){
		return this.status;
	}
	//构造一个	Quo事例
	var myQuo = new Quo('confused');
	console.log(myQuo.get_status());
//4.apply调用模式
	//apply方法让我们构建一个参数数组传递给调用函数,允许我们选择this的值,apply(要绑定给this的值,一个参数数组);
//构造一个包含两个数字的数组,并将它们相加
var array = [3,5];
var sum = add.apply(null,array);//sum=8
//构造一个包含 status 成员对象
var statusObject = {
	status:'a-ok'
};
//statusObject并没有继承自Quo.prototype,但我们可以在statusObject上调用get_status 方法
var status = Quo.prototype.get_status.apply(statusObject);//a-ok

© 著作权归作者所有

共有 人打赏支持
GZhiDao
粉丝 6
博文 115
码字总数 89796
作品 0
广州
前端工程师
JS高级之面试必须知道的几个点

深圳市人人聚财招前端啦 ~~~ 招前端,招前端,招前端,欢迎扫描加群,砸简历过来: 前言 这段时间突然发现JS原生好多东西都忘记了,但有些东西确实很重要,所以又重新再梳理一次。主要有函数的...

小小小 ⋅ 06/08 ⋅ 0

这一次,我们换种姿势学习 javascript

前言 《你不知道的 javascript》是一个前端学习必读的系列,让不求甚解的JavaScript开发者迎难而上,深入语言内部,弄清楚JavaScript每一个零部件的用途。本书介绍了该系列的两个主题:“作用...

程序员解决师 ⋅ 05/29 ⋅ 0

React Native通信原理源码分析一

小伙伴们都知道在Android开发中实现Java和JS的通信可以通过WebView来实现,包括注册JSBridge或者在接口中拦截都可以。然而React Native中并没有用WebView控件的方式,而是基于WebKit内核的方...

juexingzhe ⋅ 04/08 ⋅ 0

JavaScript核心概念归纳整理

原文出处: 熊俊漉 JavaScript语言本身是一个庞大而复杂的知识体系,复杂程度不低于任何一门后端语言,本文针对JavaScript语言的核心概念进行简单的梳理,对应的每个知识点仅仅点到为止,不作...

音乐宇Code ⋅ 05/27 ⋅ 0

【译】为什么需要在 React 类组件中为事件处理程序绑定 this

原文地址:This is why we need to bind event handlers in Class Components in React 原文作者:Saurabh Misra 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:whu...

whuzxq ⋅ 05/15 ⋅ 0

编写可维护的JavaScript

软件生命周期中80%的成本都消耗在了维护上;而且几乎所有的维护者都不是代码的直接开发人。如何让自己写的代码让别人阅读起来更高效?当然是写代码的时候注入一些规范。那么在Javascript中有...

Jouryjc ⋅ 06/12 ⋅ 0

JS与OC-WebView交互总结

OC与JS交互有两种方式,WKWebView和UIWebView,由于UIWebView比较耗内存,性能上不太好,所以苹果在iOS 8中推出了WKWebView。 一、与UIWebView交互 在UIWebView与JS交互中最简单的办法就是拦截...

乔兰伊雪 ⋅ 05/29 ⋅ 0

针对使用Github作为C&C服务的JavaScript后门分析

  最近,在做恶意软的件检测时我们发现了一个LNK文件。该文件利用Github作为其C&C服务器,并使用了一个新的基于JavaScript的Bot,来在系统上执行恶意活动。   ZIP文件的MD5哈希值:f444b...

FreeBuf ⋅ 前天 ⋅ 0

深入学习JavaScript函数

前言: 函数对于任何一门语言来说都是核心的概念,通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。而JavaScript中最好的特性就是它对函数的实现。它几乎无所不能。但...

云中玉卷 ⋅ 05/02 ⋅ 0

37个JavaScript基本面试问题和解答

编者按:本文转载自众成翻译,译者xiaosheng222,一起来学习吧。 1、使用typeof bar ===“object”来确定bar是否是一个对象时有什么潜在的缺陷?这个陷阱如何避免? 尽管typeof bar ===“obj...

奇舞周刊 ⋅ 05/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

数据库备份和恢复

备份:mysqldump -u root -p 数据库>磁盘路径 恢复:mysql -u root -p 数据库<sql脚本的磁盘路径

anlve ⋅ 53分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部