Javascript call和apply区别及使用方法


Posted in Javascript onNovember 14, 2013

一、方法的定义
call方法:
语法:fun.call(thisArg[, arg1[, arg2[, ...]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisArg 指定的新对象。
如果没有提供 thisArg参数,那么 Global 对象被用作 thisArg。

apply方法:
语法:fun.apply(thisArg[, argsArray])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisArg 任何一个参数,那么 Global 对象将被用作 thisArg, 并且无法被传递任何参数。

二、两者区别
两个方法基本区别在于传参不同
2.1、call方法:

function Product(name, price) {
this.name = name;
this.price = price;
if (price < 0)
throw RangeError('Cannot create product "' + name + '" with a negative price');
return this;
}
function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
Food.prototype = new Product();
function Toy(name, price) {
Product.call(this, name, price);
this.category = 'toy';
}
Toy.prototype = new Product();
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

2.2、apply方法:
function Product(name, price) {
this.name = name;
this.price = price;
if (price < 0)
throw RangeError('Cannot create product "' + name + '" with a negative price');
return this;
}
function Food(name, price) {
Product.apply(this, arguments);
this.category = 'food';
}
Food.prototype = new Product();
function Toy(name, price) {
Product.apply(this, arguments);
this.category = 'toy';
}
Toy.prototype = new Product();
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

三、作用实例

3.1、类的继承

function Person(name,age){
this.name = name;
this.age=age;
this.alertName = function(){
alert(this.name);
}
this.alertAge = function(){
alert(this.age);
}
}
function webDever(name,age,sex){
Person.call(this,name,age);
this.sex=sex;
this.alertSex = function(){
alert(this.sex);
}
}
var test= new webDever(“设计蜂巢”,24,”男”);
test.alertName();//设计蜂巢
test.alertAge();//24
test.alertSex();//男

3.2、回调函数
function Album(id, title, owner_id) {
this.id = id;
this.name = title;
this.owner_id = owner_id;
};
Album.prototype.get_owner = function (callback) {
var self = this;
$.get(‘/owners/' + this.owner_id, function (data) {
callback && callback.call(self, data.name);
});
};
var album = new Album(1, ‘设计蜂巢', 2);
album.get_owner(function (owner) {
alert(‘The album' + this.name + ‘ belongs to ‘ + owner);
});
Javascript 相关文章推荐
js动态在form上插入enctype=multipart/form-data的问题
May 24 Javascript
如何在node的express中使用socket.io
Dec 15 Javascript
JavaScript 性能优化小结
Oct 12 Javascript
基于jQuery实现动态搜索显示功能
May 05 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
Sep 17 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
Feb 14 Javascript
详解webpack和webpack-simple中如何引入css文件
Jun 28 Javascript
vue获取当前点击的元素并传值的实例
Mar 09 Javascript
JS倒计时两种实现方式代码实例
Jul 27 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
Sep 04 Javascript
JavaScript实现点击切换验证码及校验
Jan 10 Javascript
js动态生成表格(节点操作)
Jan 12 Javascript
javascript 上下banner替换具体实现
Nov 14 #Javascript
javascript scrollTop正解使用方法
Nov 14 #Javascript
简单的Jquery遮罩层代码实例
Nov 14 #Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
Nov 14 #Javascript
javascript loadScript异步加载脚本示例讲解
Nov 14 #Javascript
MyEclipse取消验证Js的两种方法
Nov 14 #Javascript
使用JS CSS去除IE链接虚线框的三种方法
Nov 14 #Javascript
You might like
模板引擎Smarty深入浅出介绍
2006/12/06 PHP
表单复选框向PHP传输数据的代码
2007/11/13 PHP
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
PHP循环获取GET和POST值的代码
2008/04/09 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
php传值方式和ajax的验证功能
2017/03/27 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
Python操作MongoDB详解及实例
2017/05/18 Python
python中defaultdict的用法详解
2017/06/07 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
python新手学习使用库
2020/06/11 Python
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
成绩单公证书
2014/04/10 职场文书
毕业大学生自荐信
2014/06/17 职场文书
体育专业求职信
2014/07/16 职场文书
爱牙日活动总结
2014/08/29 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
表扬信范文
2015/05/04 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书