JavaScript call,apply和prototype的介绍,区别
----这三个概念会在实现js继承中使用到
1.call和apply
call和apply的作用基本类似,都是去执行function并将这个function的context替换成第一个参数带入。两者的不同是call必须将function的参数一一带入,而apply只要在第二个参数带入一个数列。
1 function fn(arg1,arg2,arg3,...){ 2 //do something 3 } 4 5 fn(arg1,arg2,...); 6 7 fn.call(context,arg1,arg2,...); 8 9 fn.apply(context,[arg1,arg2,...]);
call方法调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[arg1[,arg2[,...[,argN]]]]])
参数:thisObj可选,用作当前对象的对象;arg1,arg2,...argN可选,将被传递方法参数序列。
如果没有提供thisObj,那么Global对象将被用作thisObj。
var func=new function(){this.a="func"};var newfunc=function(x){var a="newfunc";console.info(this.a);console.info(x); };newfunc.call(func,"hello world");//output:func hello world
2.prototype
JavaScript没有子类和父类的概念,靠原型链(prototype chain)模式来实现继承。
prototype是构造函数的一个属性。
所有实例对象需要共享的属性和方法,都放在这个prototype对象里面;那些不需要共享的属性放在构造函数里。
实例对象一旦创建,将自动引用prototype对象的属性和方法。实例对象的属性和方法分两种,一种是共享的,另一种是本地自己的。
1 //example 1 2 function Person(name){ 3 this.name=name; 4 } 5 6 var person1=new Person('Mike'); 7 var person2=new Person('Linda'); 8 person2.gender='female'; 9 console.info(person1.gender);//undefinded 10 console.info(person2.gender);//female 11 12 //example 2 13 function Person(name){ 14 this.name=name; 15 } 16 17 Person.prototype.gender='male'; 18 var person1=new Person('Mike'); 19 var person2=new Person('Linda'); 20 person2.gender='female'; 21 console.info(person1.gender);//male 22 console.info(person2.gender);//female
比较上面两个例子就知道了。
转载于:https://www.cnblogs.com/deric/p/7081557.html
JavaScript call,apply和prototype的介绍,区别相关推荐
- JavaScript的apply和call方法及其区别
参考资料: http://blog.csdn.net/myhahaxiao/article/details/6952321 apply和call能"劫持"其他对象的方法来执行,其形 ...
- 关于javascript中apply()和call()方法的区别
原文地址:http://www.cnblogs.com/fighting_cp/archive/2010/09/20/1831844.html 转载于:https://www.cnblogs.com/ ...
- JavaScript、ES5和ES6的介绍和区别
JavaScript简介 JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能. JavaScript由三部分组成: ECMAScript(核心)+DOM ...
- [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)
假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理 ...
- JavaScript prototype 使用介绍
JavaScript prototype 使用介绍用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属 ...
- js中继承的几种用法总结(apply,call,prototype)
本篇文章主要介绍了js中继承的几种用法总结(apply,call,prototype) 需要的朋友可以过来参考下,希望对大家有所帮助 一,js中对象继承 js中有三种继承方式 1.js原型(proto ...
- Javascript全局变量var与不var的区别深入解析
2019独角兽企业重金招聘Python工程师标准>>> 这篇文章主要介绍了Javascript全局变量var与不var的区别.需要的朋友可以过来参考下,希望对大家有所帮助 相信你对全 ...
- javascript原型的改动与重写(覆盖)区别
每一个JavaScript函数都有prototype属性(javascript对象没有这个属性),这个属性引用了一个对象,这个对象就是原型对象.javascript同意我们改动这个原型对象. 改动有2 ...
- JavaScript 访问对象属性和方法及区别
这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...
最新文章
- 一些使用Vim的小技巧
- 开源一个天气APP Build with React Native
- 摘要:ASP.NET的路由
- Java8-5-Function函数式接口进阶与默认方法详解
- LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)
- ajax servlet设置响应,在jquery的请求ajax与在servlet中的响应ajax
- 字符串url获取参数_如何从URL查询字符串获取示例参数或将其附加到URL查询字符串(示例)?...
- 顶尖科技棋牌游戏开发_如何接受顶尖科技公司的采访
- 微信你scope 参数错误 php,微信开发: scope参数错误或没有scope权限解决方法
- ajax json java_ajax_json
- linux7.3的域名配置表,Centos7.3 安装部署Nginx并配置https的方法步骤
- 85. Maximal Rectangle 由1拼出的最大矩形
- Android LiveData
- 我的miniQuery
- 栈的应用 算术表达式转换为后缀表达式
- VS下使用多字符集编码和Unicode字符集编码的总结
- hql删除mysql语句_hibernate -- HQL语句总结
- gvim 换行符替换
- su oracle和su - oracle的区别
- KGE性能指标:MRR,MR,HITS@1,HITS@3,HITS@10
热门文章
- python3moduleoftheweek中文_[翻译]Python Module of The Week: Counter
- python动态语言双刃性_动态语言的灵活性是把双刃剑:以 Python 语言为例
- 中检测到有潜在危险的 request.form 值。_洛宁县钢结构厂房加固检测设计中心
- 0-1背包问题(C语言)
- 德 梅齐里亚克的砝码问题matlab,德梅齐里亚克砝码问题之解
- mysql使用主从复制迁移,[MySQL进阶之路][No.0003] 主从复制(Replication)在运维中的运用...
- python中的正则表达式是干嘛的_操作python中的正则表达式(上)
- html表格标签高级应用,asp.net core标签助手的高级用法TagHelper+Form
- shell 获取命令执行结果_java高并发系列 第31天:获取线程执行结果,这6种方法你都知道?...
- python读excel两列为字典_用python读取Excel并保存字典?一两行代码完成骚操作