博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JavaScript】call和apply区别及使用方法
阅读量:5362 次
发布时间:2019-06-15

本文共 2416 字,大约阅读时间需要 8 分钟。

一、方法的定义

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(); //24test.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);});

 

转载于:https://www.cnblogs.com/frost-yen/p/8315946.html

你可能感兴趣的文章
搭建ssm过程中遇到的问题集
查看>>
OpenLayers绘制图形
查看>>
tp5集合h5 wap和公众号支付
查看>>
Flutter学习笔记(一)
查看>>
iOS10 国行iPhone联网权限问题处理
查看>>
洛谷 P1991 无线通讯网
查看>>
Codeforces Round #178 (Div. 2) B. Shaass and Bookshelf 【动态规划】0-1背包
查看>>
SparkStreaming 源码分析
查看>>
【算法】—— 随机音乐的播放算法
查看>>
mysql asyn 示例
查看>>
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>
使用iperf测试网络性能
查看>>
Docker 安装MySQL5.7(三)
查看>>
解决VS+QT无法生成moc文件的问题
查看>>
AngularJs练习Demo14自定义服务
查看>>
CF1067C Knights 构造
查看>>
[BZOJ2938] 病毒
查看>>
CSS: caption-side 属性
查看>>
CSS3中box-sizing的理解
查看>>