zoukankan      html  css  js  c++  java
  • 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类

  • 相关阅读:
    CodeForces 543d Road Improvement
    UVA Foreign Exchange
    ZOJ 1825 Compound Words
    UVA 10125 Sumsets
    CodeForces
    32位linux(centos)下mongoDB的安装
    关于PHP 采集类
    关于微信支付零时工代码的修正方法
    微信公众号申请,微信支付全攻略 2
    简介CentOS与 Ubuntu的不同
  • 原文地址:https://www.cnblogs.com/yahoo17/p/12335594.html
Copyright © 2011-2022 走看看