zoukankan      html  css  js  c++  java
  • javascript笔记 面向对象

    Javascript是一种面向对象的弱语言,既然有面向对象,就有继承

    继承:

    1.call函数和apply函数:区别在于它们参数上的不同,固定参数的用call,可变参数的用apply。换句话说,就是apply接收的是arguments。

    2.arguments是一个特别的数组参数,如果参数为arguments,你的参数只要是数组它就能接受,所以apply可以写成apply(function(){},arguments);

    3.object.call.call(object2)和object.apply.apply(object2)

      如果写成这样,那么输出会是object2定义的函数输出格式,而不是object的格式,但是原理不是类似于负负得正,call.call.call(object2)的结果还是object2的格式,因为多余两个的.call没有意义,不会参与执行,apply也一样。

     原理:宿主.call中的对象被执行后,宿主中的this变成了该对象,所以再执行一次.call的时候,新宿主就是上次被执行的对象。

    继承的方式:

    1.通过原型链继承

       所谓原型链就是利用 prototype 这一特殊的指针来进行方法的由子到父的逐级寻找调用,这种继承的思维虽然能完成继承,但是如果阁下学过java C++ C#等强面向对象语言,是不好理解的。

       看代码:

    //定义一个父函数
    function father() {
                this.LastName = 'Tommy';
                this.FirstName='Mark';
            }
            father.prototype.SayFirstName = function () {
                alert(this.FirstName);
            };

      然后我们弄一个儿子函数来继承它

    function son() {
                this.FirstName = 'Toney';
                //this.FName='Toney';
            }
            son.prototype = new father();
            son.prototype.SayFName = function () {
                alert(this.FirstName);
                //alert(this.FName); 
            };
            son.prototype.SayFName();

    我们的输出结果会是Mark,而不是Toney,即使我们把相应代码替换成注释内容仍旧不能正常显示,会输出undefined。除非我们在son.prototype上定义FName,即son.prototype.FName='Toney',才会正常显示Toney。
    采用原型链继承法会导致‘父类’和‘子类’的构造模式不同,父类是混合构造模式,而子类是原型构造模式,所以不推荐这种继承。

  • 相关阅读:
    TSQL与PL/SQL的比较
    春天预防生病
    PyG(pytorchgeometric)安装
    TensorFlow 安装与环境配置(anaconda下)
    古诗今语
    多标签分类和多分类
    RequestsDependencyWarning: urllib3 (1.26.7) or chardet (2.3.0)/charset_normalizer (2.0.4) doesn't match a supported version!
    Anacoda 安装pytorch
    所有的业务系统都是在做数据的维护和读取
    解决ORA04091行触发器中访问变异表的难题
  • 原文地址:https://www.cnblogs.com/JhoneLee/p/3333508.html
Copyright © 2011-2022 走看看