1. 前言

为什么将这三个概念放在一起说。原因是这些是会在实现js 继承会需要使用到的

2. call 和 apply

call 和 apply 的作用基本类似, 都是去执行function并将这个function 的context替换成第一个参数带入。 两者的不同是call 必须将function 的参数一一带入,而 apply  只要在第二个参数带入一个数列。
function fn( arg1, arg2,... ){// do something
}fn( arg1, arg2,... );fn.call( context, arg1, arg2,... );fn.apply( context, [ arg1, arg2,... ]);

手册的解释:
===================================
call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

参数
thisObj
可选项。将被用作当前对象的对象。

arg1, arg2,  , argN
可选项。将被传递方法参数序列。

说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
=====================================

<!--by oscar999 2013-1-17-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<script>
var func=new function(){this.a="func"}var newfunc=function(x){var a="newfunc";alert(this.a);alert(x);}newfunc.call(func,"inputParameter1"); /*alert are* func/inputParameter1; not newfunc/inputParameter1*/
</script>
</body>
</html>

从以上的例子可以看出, alert(this.a), 返回的是并不是当前函数里的值。

使用call 执行的速度会稍微快一些, 不过差异不大。

3.prototype

JavaScript没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instance)的区分,全靠一种很奇特的"原型链"(prototype chain)模式,来实现继承。
prototype 其实就是构造函数的一个属性。
所有实例对象需要共享的属性和方法,都放在这个对象里面;那些不需要共享的属性和方法,就放在构造函数里面。
实例对象一旦创建,将自动引用prototype对象的属性和方法。也就是说,实例对象的属性和方法,分成两种,一种是本地的,另一种是引用的。

function Person(name){this.name = name;this.gender = "male";
}
var person1 = new Person("MM");
var person2 = new Person("YY");
person1.gender = "female";
alert(person2.gender);// male
</script>
<script>
function Person(name){this.name = name;
}
Person.prototype.gender = "female";
var person1 = new Person("MM");
var person2 = new Person("YY");
alert(person2.gender);// male
</script>

比较以上两个例子就知道了。

4. 参考

http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html

JavaScript 之call , apply 和prototype 介绍相关推荐

  1. js中继承的几种用法总结(apply,call,prototype)

    本篇文章主要介绍了js中继承的几种用法总结(apply,call,prototype) 需要的朋友可以过来参考下,希望对大家有所帮助 一,js中对象继承 js中有三种继承方式 1.js原型(proto ...

  2. 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法

    by Ashay Mandwarya ?️?? 由Ashay Mandwarya提供吗? 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法 (How to use ...

  3. JavaScript 中call apply 那点简单事

    谈谈JavaScript 中call apply 那点简单事 平常是否遇到过call apply 的问题 比如说 怎么利用call.apply来求一个数组中最大或者最小值 如何利用call.apply ...

  4. javascript call与apply关键字的作用

    apply接受两个参数.第一个参数指定函数体内this对象的指向,第二个参数为一个带下标的集合. call则是apply的语法糖,如果参数数量固定,则可以不用带下标的集合传第二个参数. 1 2 3 4 ...

  5. JavaScript、ES5和ES6的介绍和区别

    JavaScript简介 JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能. JavaScript由三部分组成: ECMAScript(核心)+DOM ...

  6. php操作剪贴板内容代码,JavaScript操作剪贴板的实现方法介绍

    本篇文章给大家带来的内容是关于JavaScript操作剪贴板的实现方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 通过 js 可以操作剪贴板的 复制 剪切 粘贴 用到的方法和 ...

  7. JavaScript call,apply和prototype的介绍,区别

    ----这三个概念会在实现js继承中使用到 1.call和apply call和apply的作用基本类似,都是去执行function并将这个function的context替换成第一个参数带入.两者的 ...

  8. JavaScript Prototype介绍

    转载的这两篇博文可以加深对Prototype的理解 介绍一 用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个proto ...

  9. JavaScript——this、constructor、prototype

    this this表示当前对象,如果在全局作用范围内使用this,则指代当前页面对象window: 如果在函数中使用this,则this指代什么是根据运行时此函数在什么对象上被调用. 我们还可以使用a ...

最新文章

  1. python安装scipy
  2. can与could区别
  3. Linux虚拟网络设备之tun/tap
  4. 视频编码中为什么须要进行变换编码?
  5. 甘肃暴雨强度公式_最新给排水计算软件,16大功能常用公式自动计算,配11套施工方案...
  6. MINIST数据集实践
  7. 美区id无法登陆解决方法
  8. 2020年中国天线行业发展现状及细分市场结构分析[图]
  9. 使用AudioRecord实现声音采集
  10. 【机器视觉锁付整体解决方案】视觉纠偏和找孔示教操作
  11. 在电脑上修改apk、重新签名apk
  12. 蓝牙LMP剖析(一)
  13. js小学生图区_多种方式实现js图片预览
  14. [转][晓月风瑟推荐]值得用一生来品味的100句凡人语录
  15. 2021安徽高考体考成绩查询,2021年安徽体育专业考试成绩查询网址:https://www.ahzsks.cn/...
  16. 算法:求小于N的最大素数
  17. CRM系统-----学员管理系统---admin自定义开发2
  18. Lyx使用对中文进行编译
  19. 利用iframe跨域请求
  20. MyBatis总结 Day01

热门文章

  1. Android Studio创建AVD
  2. android 视频通话开启呼叫等待后,来第三方的视频通话,接通后通话时间一直显示为0,过几秒之后视频通话自己主动挂断...
  3. X-UA-Compatible 解决IE浏览器样式不兼容问题
  4. 通过伪协议解决 父页面与iframe页面通信的问题
  5. Java Android未捕获异常处理机制
  6. 怎样在xcode5中使用低版本sdk,解决兼容ios7ui问题
  7. 自然语言处理技术在推荐系统中的应用和发展(附交流视频和PPT下载链接)
  8. 【报告分享】如何嫁给“改变世界的男人”-程序员之理想女友大调查.pdf(附下载链接)...
  9. error: numpy/arrayobject.h No such file or directory解决方法
  10. Python实战从入门到精通第十四讲——定义有默认参数的函数