(2)基于原型的类继承

1 version 1

var Animal = function(){
        this.init(this,arguments);
    };

    //init
    Animal.prototype.init = function(color){
        this.color = color;
    };
    Animal.prototype.breath = function(){
        console.log("breath");
    };

    var Dog = function(){};
    Dog.prototype = new Animal();

    Dog.prototype.init("white");

    Dog.prototype.getColor = function(){
        console.log(this.color);
    };

    var dog = new Dog();
    dog.breath();//breath
    dog.getColor();//white

(1) Dog类继承Animal类,这种继承属于原型继承,那就是说Dog的原型里面拥有Animal类的实例

2 version 2 类库添加继承

var Class = function(parent){
        var klass = function(){
            this.init.apply(this,arguments);
        };
        if(parent){
            var subClass = function(){};
            subClass.prototype = parent.prototype;
            klass.prototype = new subClass();
        }
        //init
        klass.prototype.init = function(){};
        klass.fn = klass.prototype;
        klass.fn.parent = klass;
        //add class property
        klass.extend = function(obj){
            var extended = obj.extended;
            for(var i in obj){
                klass[i] = obj[i];
            }
            if(extended) extended(klass);
        };
        //add prototype property
        klass.include = function(obj){
            var included = obj.included;
            for(var i in obj){
                klass.fn[i] = obj[i];
            }
            if(included) included(klass);
        };
        return klass;
    };

    var Animal = new Class();

    Animal.include({
        breath:function(){
            console.log(‘breath‘);
        }
    });

    var Cat = new Class(Animal);
    var tommy = new Cat();
    tommy.breath();

可以仔细看这段代码

 if(parent){
            var subClass = function(){};
            subClass.prototype = parent.prototype;
            klass.prototype = new subClass();
        }

再次将Animal这个function传回去,新建一个局部的subClass的原型指向Animal的原型,再将klass的原型指向subClass的实例,防止了原型污染

时间: 2024-10-23 14:11:09

(2)基于原型的类继承的相关文章

Javascript:原型模式类继承

原型模式 每个函数(准确说不是类.对象)都有一个prototype属性,这个属性是一个指针,指向一个对象. 使用原型对象的好处是可以让所有对象实例共享它包含的属性和方法. 1.原型对象 (1)当创建一个新函数,就会为该函数创建一个prototype属性,这个属性指向函数的原型对象. (2)默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向 prototype属性所在函数  的指针. (3)实例的内部包含一个指针,叫[[Prototype]].不过

通过JavaScript原型链理解基于原型的编程

零.此文动机 用了一段时间的Lua,用惯了Java C++等有Class关键字的语言,一直对Lua的中的面向对象技术感到费解,一个开源的objectlua更是看了n遍也没理解其中的原理,直到看到了Prototype-based programming 一.什么是基于原型的编程 基于原型的编程是面向对象编程的一种形式,通过复制已经存在的原型对象来实现面向对象,无与基于类的编程较大的区别是没有Class关键字,但是有类的概念.基于原型的编程也可以理解成基于实例的编程. 基于原型的系统可以在程序运行时

JavaScript原型链和继承

1.概念 JavaScript并不提供一个class的实现,在ES6中提供class关键字,但是这个只是一个语法糖,JavaScript仍然是基于原型的.JavaScript只有一种结构:对象.每个对象都有一个私有属性:_proto_,这个属性指向它构造函数的原型对象(property).它的原型对象也有一个属于自己的原型对象,这样层层向上知道一个对象的属性为null.根据定义null没有原型,它是这个原型链中的最后一个环节. 几乎所有的JavaScript中的对象都是位于原型链顶端的Objec

JavaScript基于原型的继承

在一个纯粹的原型模式中,我们会摒弃类,转而专注于对象,基于原型的继承相比基于类的继承的概念上更为简单 if( typeof Object.beget !== 'function') { Object.beget = function(o) { var F = function() {}; F.prototype = o; return new F(); } } var myMammal = { name : 'Herb the Mammal', get_name : function() { r

基于原型继承的JavaScript对象系统

原型编程范型 基于原型链的委托机制就是原型继承的本质. 原型编程范型的基本原则: 1. 所有的数据都是对象. 2. 要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它. function Person(name){ this.name=name; } Person.prototype.getName=function() { return this.name=name; } var a=new Person('sven'); console.log(a.name);//sven

JS中“类”继承和原型继承

类继承: 先用函数构造器创建了一个“类”Student,然后在Student原型上定义了一个方法sayHello,然后创建了一个"类“PrimaryStudent,用apply()初始化PrimaryStudent. 然后让PrimaryStudent的原型等于Student创建的对象,并把PrimaryStudent原型上的构造器指向当前”类“,即PrimaryStudent,注意红色加粗部分. 1 function Student(name){ 2 this.name = name; 3 }

基于内置类的原型扩展方法

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>基于内置类的原型扩展方法</title></head><body><script type="text/javascript"> var ary = [12, 23, 34, 12, 23, 34, 12, 23, 34, 12, 23, 34,

JS 类继承 原型继承

参考文档:JS原型继承和类继承 <script src="jquery-2.0.3.js"> </script> <script> /*//类继承 var father=function(){ this.age=53; this.say=function(){ console.log("name:"+this.name+",age:"+this.age); } }; var child=function(){

【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链

JavaScript里的继承方式在很多书上分了很多类型和实现方式,大体上就是两种:类继承(对象冒充)和原型继承. 类继承(对象冒充):在函数内部定义自身的属性的方法,子类继承时,用call或apply实现对象冒充,把类型定义的东西都复制过来,这样的继承子类与父类并没有多少关联,不互相影响,有利于保护自身的一些私有属性. 原型继承:每个函数都有自己的原型(prototype)属性,这个属性是在生成实例对象时自动创建的.它本身又是一个对象,拥有能够在实例间共享的属性和方法.而实例本身的属性和方法,则