js 中的call()函数
a.call(b);
官方说:什么对象替换什么对象。
a对象的方法应用到b对象上(函数apply的意思正好说明符合这样理解:a对象应用到b对象上去)
a对象既然添加到b对象上了。那么b对象自然就拥有了a对象所有的内容。所有,b对象就继承了a对象了。结合自己编写的下面代码,理解怎么实现继承:
function class1()
{
this.name = function(){
alert("class1的方法name()");
}
}
function class2()
{
class1.call(this);//要想实现class2继承class1 this就是当前对象class2。
}
现在可以知道是否实现继承了:
var cl = new class2();
cl.name();//class2继承了class1,class2是父类。调用父类的方法
另外一种实现继承的方式:用一个继承函数,专门实现继承。
function extend()
{
class2.call(this);
class1.call(this);
}
只要使用extend方法就能实现同时继承class2 class1。从这里可以记住:js语法中,一个对象可以同时继承两个对象。这点跟java语言的对象机制一样的。java语法中,对象的继承关系,形象店,就相当于一个儿子可以同时有两个爸爸。这确实不符合实际。不过,没必要纠结。知道用就行了。
var Class = {
    create: function() {
        return function() { this.initialize.apply(this, arguments); }
    }
}
这里的arguments参数放进去是做什么用的?而且名字起好是arguments?肯定有其道理
注意到,call()与apply()的区别:功能一样。第二个参数形式不一样。call传递多个参数,是任意形式。apply第二个参数必须是数组形式。
用代码来理解它们区别最好:
a.call(b,2,3); ==> a.apply(b,[2,3]);//数组形式传入
就是利用了apply参数是数组的特性。结合函数的隐性参数,都会自动保存在arguments数组中。这样,使用apply的方式:
this.initialize.apply(this, arguments);
可以直接将当前函数的arguments数组作为apply的第二个参数传入,不需要转化。
js 中的call()函数的更多相关文章
- js中的回调函数的理解和使用方法
		js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ... 
- underscore.js中的节流函数debounce及trottle
		函数节流 throttle and debounce的相关总结及想法 一开始函数节流的使用场景是:放止一个按钮多次点击多次触发一个功能函数,所以做了一个clearTimeout setTimeou ... 
- js中如何在一个函数里面执行另一个函数
		1.js中如何在函数a里面执行函数b function a(参数c){ b(); } function b(参数c){ } 方法2: <script type="text/javasc ... 
- JavaScript -- 时光流逝(七):js中的全局函数
		JavaScript -- 知识点回顾篇(七):js中的全局函数 全局函数可用于所有内建的 JavaScript 对象. (1) encodeURI():把字符串编码为 URI. <script ... 
- js中的匿名函数和匿名自执行函数
		1.匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: <input type="button" value="点击" id ... 
- JS中关于把函数作为另一函数的参数的几点小总结
		//JS中关于把函数作为函数的参数来传递的问题的小总结//第一,最简单的形式无参函数,直接形式函数的函数名放到括号中,再在执行部分这个函数即可.//当然调用时要穿另一个真正的定义好的函数/*funct ... 
- js中的Generators函数
		js中的Generators函数 generator一般操作 generator函数的作用就是函数体分段执行,yield表示分隔点 function *test() { console.log(1); ... 
- JS中的回调函数实例浅析
		本文实例讲述了JS中的回调函数.分享给大家供大家参考,具体如下: 在说回调函数之前,不妨先看一段代码,相信有点js基础的同学都能明白他的含义: ? 1 2 3 document.getElementB ... 
- js中关于事件处理函数名后面是否带括号的问题
		今天总结一个关于事件处理程序的小细节.首先回顾一下事件处理的一些概念. JS中的事件处理(事件绑定)就是让某种或某些事件触发某些活动.有两种常见的形式,分别是DOM Level 0 和DOM Leve ... 
- js中的匿名函数自执行
		随笔,java中因为有修饰符的存在,那就有private类的存在,js不一样,没有修饰词一说,因此为了防止全局变量的污染,js中就出现了匿名函数,直接上code,看到的人可以自己体会: (functi ... 
随机推荐
- 通过SessionID和用户名来保证同一个用户不能同时登录(单点登录)
			可以通过SessionID和用户名来保证同一个用户不能同时登录的问题,下面程序模仿了QQ的登录,当登录后判断当前帐号是否已经登录,如果登录.则踢掉以前登录的用户. 1.通过Application全局变 ... 
- QT中静态库的生成与使用
			一. 静态库的生成 1. 测试目录: lib 2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ... 
- 认识C和内存管理
			认识C和内存管理 C程序内存空间分为下面5类: stack栈: 存放着局部变量和函数参数等数据,向下生长 (可读可写可执行) heap堆: 给动态分配内存使用,向上生长 (可读可写可执行) bss ... 
- ASP.NET easyUI--datagrid 通过ajax请求ASP.NET后台数据的分页查询
			js前台对datagrid的定义代码,如下 mygrid = $('#mytable').datagrid({ fit: true, //自动大小 height: 'auto', rownumbers ... 
- 淘宝付邮试用Chrome桌面提醒插件(含源码)
			淘宝付邮试用每天都会推出10元邮费试用的商品,有些对自己还是有用的.试用一下还不错,关键是便宜.不过,有些商家也抓住了买家贪便宜的特点,推出廉价垃圾商品.这里,大家还是慧眼识别了.每天浏览这些商品会很 ... 
- 微信的公众号unionid
			此外,由于开发者经常有需在多个平台(移动应用.网站.公众帐号)之间共通用户帐号,统一帐号体系的需求,微信开放平台(open.weixin.qq.com)提供了UnionID机制.开发者可通过OpenI ... 
- bash变量操作
			1.条件变量替换: Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换 条件放在{}中. (1) ${value:-word} 当变量未定义或者值为空时,返回值为word ... 
- mysql中all privileges包含哪些权限
			mysql> grant all privileges on test.* to 'ybb'@'%' identified by 'ybb'; Query OK, 0 rows affected ... 
- Unity3D 基于预设(Prefab)的泛型对象池实现
			背景 在研究Inventory Pro插件的时候,发现老外实现的一个泛型对象池,觉得设计的小巧实用,不敢私藏,特此共享出来. 以前也看过很多博友关于对象池的总结分享,但是世界这么大,这么复杂到底什么样 ... 
- ssh tunnel通道
			Secure SHell (SSH) 是一个通过网络登录其他计算机的程序,在远程服务器运行命令,和从一台机器移动文件到另一台.在不安全的网络中,它提供两台主机之间强大认证和安全加密的的通讯,被称为 S ... 
