• JavaScript中call,apply和prototype


    call()方法

    语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
    定义:调用一个对象的一个方法,以另一个对象替换当前对象。
    如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

    a.call(b,name); //简单理解为b继承了a,b中包含a中属性和方法
    

    apply()方法

    语法:apply([thisObj[,argArray]])
    如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
    如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
    区别:
    call的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments
    示例:cat继承了animal,在cat定义中,直接使用 Animal.call(this, name);

    function Animal(name){      
        this.name = name;      
        this.showName = function(){      
            alert(this.name);      
        }      
    }      
        
    function Cat(name){    
        Animal.call(this, name);    
    }      
        
    var cat = new Cat("Black Cat");     
    cat.showName();  
    

    prototype

    原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。
    javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。
    javascript的方法可以分为三类:

    function People(name)
    {
      this.name=name;
      //对象方法
      this.Introduce=function(){
        alert("My name is "+this.name);
      }
    }
    //类方法
    People.Run=function(){
      alert("I can run");
    }
    //原型方法
    People.prototype.IntroduceChinese=function(){
      alert("我的名字是"+this.name);
    }
    

    A.prototype = new B();
    理解为,A克隆了B的属性和方法,同名函数不会被克隆。


    参考一
    参考二:轩脉刃(yjf512)



    I am a slow walker, but I never walk backwards.



  • 相关阅读:
    linux mail 简操作
    数据挖掘-概念与技术-第10章聚类作业题
    机器学习实战 -> 无监督学习
    机器学习实战 -> 利用PCA&&SVD来简化数据
    贪婪算法
    统计学习方法 –> 支持向量机
    统计学习方法 –> 逻辑死地回归与最大熵模型
    最优二叉搜索树
    动态规划
    统计学习方法–> 决策树
  • 原文地址:https://www.cnblogs.com/lknny/p/5661162.html
Copyright © 2020-2023  润新知