----这三个概念会在实现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的介绍,区别相关推荐

  1. JavaScript的apply和call方法及其区别

    参考资料: http://blog.csdn.net/myhahaxiao/article/details/6952321 apply和call能"劫持"其他对象的方法来执行,其形 ...

  2. 关于javascript中apply()和call()方法的区别

    原文地址:http://www.cnblogs.com/fighting_cp/archive/2010/09/20/1831844.html 转载于:https://www.cnblogs.com/ ...

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

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

  4. [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)

    假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理 ...

  5. JavaScript prototype 使用介绍

    JavaScript prototype 使用介绍用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属 ...

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

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

  7. Javascript全局变量var与不var的区别深入解析

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章主要介绍了Javascript全局变量var与不var的区别.需要的朋友可以过来参考下,希望对大家有所帮助 相信你对全 ...

  8. javascript原型的改动与重写(覆盖)区别

    每一个JavaScript函数都有prototype属性(javascript对象没有这个属性),这个属性引用了一个对象,这个对象就是原型对象.javascript同意我们改动这个原型对象. 改动有2 ...

  9. JavaScript 访问对象属性和方法及区别

    这篇文章主要介绍了浅析JavaScript访问对象属性和方法及区别的相关资料,仅供参考 属性是一个变量,用来表示一个对象的特征,如颜色.大小.重量等:方法是一个函数,用来表示对象的操作,如奔跑.呼吸. ...

最新文章

  1. 一些使用Vim的小技巧
  2. 开源一个天气APP Build with React Native
  3. 摘要:ASP.NET的路由
  4. Java8-5-Function函数式接口进阶与默认方法详解
  5. LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)
  6. ajax servlet设置响应,在jquery的请求ajax与在servlet中的响应ajax
  7. 字符串url获取参数_如何从URL查询字符串获取示例参数或将其附加到URL查询字符串(示例)?...
  8. 顶尖科技棋牌游戏开发_如何接受顶尖科技公司的采访
  9. 微信你scope 参数错误 php,微信开发: scope参数错误或没有scope权限解决方法
  10. ajax json java_ajax_json
  11. linux7.3的域名配置表,Centos7.3 安装部署Nginx并配置https的方法步骤
  12. 85. Maximal Rectangle 由1拼出的最大矩形
  13. Android LiveData
  14. 我的miniQuery
  15. 栈的应用 算术表达式转换为后缀表达式
  16. VS下使用多字符集编码和Unicode字符集编码的总结
  17. hql删除mysql语句_hibernate -- HQL语句总结
  18. gvim 换行符替换
  19. su oracle和su - oracle的区别
  20. KGE性能指标:MRR,MR,HITS@1,HITS@3,HITS@10

热门文章

  1. python3moduleoftheweek中文_[翻译]Python Module of The Week: Counter
  2. python动态语言双刃性_动态语言的灵活性是把双刃剑:以 Python 语言为例
  3. 中检测到有潜在危险的 request.form 值。_洛宁县钢结构厂房加固检测设计中心
  4. 0-1背包问题(C语言)
  5. 德 梅齐里亚克的砝码问题matlab,德梅齐里亚克砝码问题之解
  6. mysql使用主从复制迁移,[MySQL进阶之路][No.0003] 主从复制(Replication)在运维中的运用...
  7. python中的正则表达式是干嘛的_操作python中的正则表达式(上)
  8. html表格标签高级应用,asp.net core标签助手的高级用法TagHelper+Form
  9. shell 获取命令执行结果_java高并发系列 第31天:获取线程执行结果,这6种方法你都知道?...
  10. python读excel两列为字典_用python读取Excel并保存字典?一两行代码完成骚操作