• Javascript一天学完系列(五)Inheritance继承


    Inheritance继承


    JavaScript使用基于原型的继承。 每个对象都有一个原型,并且当调用该对象的方法时,JavaScript会尝试从原型对象中查找要执行的正确函数。

    The prototype attribute

    Without using the prototype object, we can define the object Person like this:

    function Person(name, age)
    {
        this.name = name;
        this.age = age;
    
        function describe()
        {
            return this.name + ", " + this.age + " years old.";
        }
    }
    

    创建Person对象的实例时,我们将创建函数的所有成员和方法的新副本。 这意味着对象的每个实例将具有其自己的名称和年龄属性以及其自己的describe函数。但是,如果我们使用 Person.prototype 对象并为其分配功能,它也将起作用。

    function Person(name, age)
    {
        this.name = name;
        this.age = age;
    }
    
    Person.prototype.describe = function()
    {
        return this.name + ", " + this.age + " years old.";
    }
    

    创建Person对象的实例时,它们将不包含describe函数的副本。 相反,当调用对象方法时,JavaScript将尝试首先从对象本身解析出describe函数,然后再使用其原型属性。

    Inheritance

    Let's say we want to create a Person object, and a Student object derived from Person:

    var Person = function() {};
    
    Person.prototype.initialize = function(name, age)
    {
        this.name = name;
        this.age = age;
    }
    
    Person.prototype.describe = function()
    {
        return this.name + ", " + this.age + " years old.";
    }
    
    var Student = function() {};
    Student.prototype = new Person();
    
    Student.prototype.learn = function(subject)
    {
        console.log(this.name + " just learned " + subject);
    }
    
    var me = new Student();
    
    me.initialize("John", 25);
    me.learn("Inheritance");
    

    正如我们在本例中看到的那样,“ initialize”方法属于“ Person”,而“ learn”方法属于“ Student”,两者现在都属于“ me”对象。

    请记住,使用JavaScript进行继承的方法有很多,这只是其中之一。

    Exercise

    Create an object called Teacher derived from the Person class, and implement a method called teach which receives a string called subject, and prints out:

    [teacher's name] is now teaching [subject]
    

    Answer

    var Person = function() {};
    
    Person.prototype.initialize = function(name, age)
    {
        this.name = name;
        this.age = age;
    }
    var Teacher=function(){};
    Teacher.prototype=new Person();
    Teacher.prototype.teach=function(subject)
    {
        console.log( this.name+" is now teaching "+subject);
    }
    
    // TODO: create the class Teacher and a method teach
    
    var him = new Teacher();
    
    him.initialize("Adam", 45);
    him.teach("Inheritance");
    

    解释一下代码吧 前面先创建person类,然后person类加一个原型initiallize

    然后创建teacher类,然后把person也当成teacher的一个属性或者说一个成员或者说一个原型加入进teacher类

  • 相关阅读:
    Fiddler系列教程3:使用Fiddler录制Jmeter性能测试脚本
    PySide6读取EXCLE文档
    C#实现操作DOS命令的方法
    在PyCharm中调用xlrd模块出现 ModuleNotFoundError: No module named 'xlrd' ,但在sublime却可以正常
    pip安装时出现错误:File "D:Python39Scriptspip.exe\__main__.py", line 4, in <module> ModuleNotFoundError: No module named 'pip'
    /ect/fstab与/etc/mtab的区别
    虚拟机中Ubuntu系统修改分辨率
    关于报错Could not load file or assembly的问题
    关于WinCC归档应该知道的事
    vue + element 表单的简单公用组件,表格的集成写法
  • 原文地址:https://www.cnblogs.com/yahoo17/p/12335594.html
Copyright © 2020-2023  润新知