• [转]javaScript如何实现面向对象中的继承?( 函数的方法call() 使用详解)


    call() 方法是javaScript中每个函数原型链上的方法,

    1、概述

    call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数( 参数的列表 )。

    call() 方法作用和apply()作用类似,唯一区别,call()接受若干参数,apply()接收一个包含若干参数的数组

    1.1、语法

    fun.call(thisArg, arg1, arg2, ...)
    1.1.1、 thisArg

    在fun函数运行时指定的this值。需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。

    1.1.2、arg1, arg2, …

    指定的参数列表。

    1.1.3、 返回值
    返回值是调用方法的返回值,若改方法没有返回值,则返回undefined

    1.1.4、描述
    可以通过call()来实现继承,写一个方法然后让另一个对象继承它,而不是在新对象中重新写一下这个方法

    call()方法存在于在Function.prototypeFunction.prototype.call(),因此每个 函数都可以通过原型链继承下来。

    2、作用

    2.1、继承函数的属性和方法
    // 1. 使用 call 继承方法和属性
    		
    
    // 1. 使用 call 继承方法和属性
            
    function Person() {
        
        this.name = 'person';
        this.age = 24;
        
        this.print = function(){
            console.log('hello call!');
        }
        
    }
    
    function Son(){
        
        // 使 son 继承 Person 的方法和属性
        Person.call(this);
        
        this.study = 'study';
        
        this.play = function(){
            console.log('son play!');
        }
        
    }
    
    var son = new Son();
    
    console.log(son);
    son.print() //hello call!
    son.age// 24

    通过控制台打印发现,此时 son已经具有 Person的方法和属性
    在这里插入图片描述

    2.2、使用call() 方法调用匿名函数
    // 2. 使用call() 方法调用匿名函数
    
    
    function Person() {
        
        this.name = 'person';
        this.age = 24;
        
        this.print = function(){
            console.log('hello call!');
        }
        
    }
    
    (function(){
        
        this.print();
        
    }).call(new Person());

    控制台打印
    在这里插入图片描述

    2.3、使用call() 方法调用函数并且指定上下文的this
    function print() {
    
        var message = [this.person, 'is an awesome', this.role].join(' ');
        console.log(message);
    
    }
    
    var desc = {
        person:'Douglas Crockford',
        role:'Javascript Developer'
    }
    
    print.call(desc);

    在这里插入图片描述

    来源:https://blog.csdn.net/ithanmang/article/details/83411831

  • 相关阅读:
    时光卷轴,IT启示录2022年5月刊
    乘风破浪,遇见最美Windows 11之现代Windows桌面应用开发 自定义生成配置文件(Directory.Build.props)来实现灵活切换
    源码解读之RedissonLock.lock()方法 爱我
    最小生成树
    tarjan/2sat
    【java校招你不知道的那些事儿】校招和社招的区别是什么?为什么不参加社招
    SQL in 参数化
    手写事件发布/订阅框架(二)
    JDMatrix
    sql的查询多次in 操作的导致查询数据为空
  • 原文地址:https://www.cnblogs.com/Bruce_H21/p/12462013.html
Copyright © 2020-2023  润新知