call()与构造函数的运用

本文详细介绍了 JavaScript 中的 call() 方法,包括如何在指定的作用域下调用函数以及如何通过构造函数实现继承。提供了具体的代码示例来展示 call() 的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

call()和apply()方法是所有函数体的固有属性,可以在指定作用域下调用函数。这里面有两层意思:1.可以在另外的作用域下调用函数;2.当函数体是是构造函数时,call()方法能达到类之间继承的效果。

二、call()

1.调用函数

下面举例说明:

var a = function (){
    console.log('aaa')
}

var b = function (){
    a.call(this);
}
b();  //输出 aaa

a.call(this)等效于a(),即是在b函数的作用域下调用了a();这种用法意义不大,理解就行。 

2.构造函数继承

call()方法主要在面向对象编程中使用,可在不同类(构造函数)中继承。

var A = function(){
    this.a = function(){
        console.log('aaa')
    };
    this.name = 'a';
    console.log('this is a');
}

var B = function (){    
    A.call(this); 
    this.num = '2';
}

var boo = new B();    //this is a
boo.a();    //aaa
console.log(boo.name);    //a
console.log(boo.num);    //2

A、B都是构造函数,A.call(this)即是在B作用域下调用A构造函数。因此,B继承了A的属性、方法,同时调用了A构造函数。B的实例将拥有A的所有特性。

下面我们再来看个例子:

var A = function(){
    this.a = function(){
        console.log('aaa')
    };
    this.name = 'a';
    console.log('this is a');
}

var B = function (){    
    A.call(this);  
    this.num = '2';
}

var c = {}  
B.call(c);    //this is a
c.a();    //aaa
console.log(c.name);    //a
console.log(c.num);    //2

定义对象c(非构造函数),再c的作用域下调用B构造函数,c对象也会继承B的所有属性、方法。这是一个对象实例和构造函数的区别。

 

转载于:https://www.cnblogs.com/lodadssd/p/7475274.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值