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。
    采用原型链继承法会导致‘父类’和‘子类’的构造模式不同,父类是混合构造模式,而子类是原型构造模式,所以不推荐这种继承。

  • 相关阅读:
    windows 10 上源码编译opengv | compile opengv on windows 10 from source
    ubuntu 16.04上源码编译libjpeg-turbo和使用教程 | compile and use libjpeg-turbo on ubuntu 16.04
    c 时间 学习
    cap文件的格式说明
    C#调用C++
    c/c++基础 const
    tomcat 简单安装配置说明
    言论
    近期任务
    解决mysql从windows迁移到centos出现乱码问题
  • 原文地址:https://www.cnblogs.com/JhoneLee/p/3333508.html
Copyright © 2011-2022 走看看