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 相关文章推荐
javascript 面向对象编程 万物皆对象
Sep 17 Javascript
javascript:void(0)的问题使用探讨
Apr 10 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
Sep 06 Javascript
jquery ztree异步搜索(搜叶子)实践
Feb 25 Javascript
BootStrap select2 动态改变值的方法
Feb 10 Javascript
javascript编程实现栈的方法详解【经典数据结构】
Apr 11 Javascript
vue中各组件之间传递数据的方法示例
Jul 27 Javascript
vue 使用Jade模板写html,stylus写css的方法
Feb 23 Javascript
Bootstrap实现省市区三级联动(亲测可用)
Jul 26 Javascript
js实现坦克移动小游戏
Oct 28 Javascript
在Vue中创建可重用的 Transition的方法
Jun 02 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
Jul 21 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
php中定时计划任务的实现原理
2013/01/08 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
JavaScript 指导方针
2007/04/05 Javascript
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
js解决弹窗问题实现班级跳转DIV示例
2014/01/06 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
jQuery使用元素属性attr赋值详解
2015/02/27 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
javascript设置文本框光标的方法实例小结
2016/11/04 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
深入解析Python中的WSGI接口
2015/05/11 Python
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
基于pandas中expand的作用详解
2019/12/17 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
Python是怎样处理json模块的
2020/07/16 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
乡镇消防安全责任书
2014/07/23 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
导游词之镜泊湖
2019/12/09 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
Go timer如何调度
2021/06/09 Golang
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL