js面向对象之继承-原型继承

//animal 父类 超类
        var Animal = function(name)
        {
            this.name = name;
            this.sayhello = function()
            {
                alert("HI,我是" + this.name + ",你愿意和我做朋友吗?");
            };
        };
        Animal.prototype.shout = function()
        {
            alert(this.name + ",正在叫!");
        };
        Animal.prototype.game = function()
        {
            alert(this.name + ",正在玩耍!");
        };

        var Dog = function(name)
        {
            //this.name = name;
            this.name = name;
            this.shout = function()//重写父类的函数
            {
                alert(this.name + ",正在汪汪叫!");
            };
        };

        var Cat = function(name)
        {
            this.name = name;
            this.shout = function()
            {
                alert(this.name + ",正在喵喵叫!");
            };
        };

        //原型继承
        Dog.prototype = Cat.prototype = new Animal();

        var xh = new Dog("小黑");
        xh.sayhello();
        xh.shout();
        xh.game();

        var xm = new Cat("小咪");
        xm.sayhello();
        xm.shout();
        xm.game();

封装一个函数后:

var inherit = function (subclass, superclass) {
    subclass.prototype = new superclass();
};

//animal 父类 超类
var Animal = function (name) {
    this.name = name;
    this.sayhello = function () {
        alert("HI,我是" + this.name + ",你愿意和我做朋友吗?");
    };
};
Animal.prototype.shout = function () {
    alert(this.name + ",正在叫!");
};
Animal.prototype.game = function () {
    alert(this.name + ",正在玩耍!");
};

var Dog = function (name) {
    //this.name = name;
    this.name = name;
    this.shout = function () //重写父类的函数
    {
        alert(this.name + ",正在汪汪叫!");
    };
};

var Cat = function (name) {
    this.name = name;
    this.shout = function () {
        alert(this.name + ",正在喵喵叫!");
    };
};

//原型继承
//Dog.prototype = Cat.prototype = new Animal();
inherit(Dog, Animal);
inherit(Cat, Animal);

var xh = new Dog("小黑");
xh.sayhello();
xh.shout();
xh.game();

var xm = new Cat("小咪");
xm.sayhello();
xm.shout();
xm.game();

给函数添加extends方法

Function.prototype.extends = function (superclass) {
    this.prototype = new superclass();
};

//animal 父类 超类
var Animal = function (name) {
    this.name = name;
    this.sayhello = function () {
        alert("HI,我是" + this.name + ",你愿意和我做朋友吗?");
    };
};
Animal.prototype.shout = function () {
    alert(this.name + ",正在叫!");
};
Animal.prototype.game = function () {
    alert(this.name + ",正在玩耍!");
};

var Dog = function (name) {
    this.name = name;
    this.shout = function () //重写父类的函数
    {
        alert(this.name + ",正在汪汪叫,叫的很开心!");
    };
};
Dog.extends(Animal);

var Cat = function (name) {
    this.name = name;
    this.shout = function () {
        alert(this.name + ",正在喵喵叫!");
    };
};
Cat.extends(Animal);

//原型继承
//Dog.prototype = Cat.prototype = new Animal();
/*inherit(Dog, Animal);
        inherit(Cat, Animal);*/
//Dog.extends(Animal);
//Cat.extends(Animal);

/*var xh = new Dog("小黑");
        xh.sayhello();
        xh.shout();
        xh.game();

        var xm = new Cat("小咪");
        xm.sayhello();
        xm.shout();
        xm.game();*/

var Husky = function (name, color, sex) {
    this.name = name;
    this.color = color;
    this.sex = sex;
    this.sayhello = function () {
        alert("Hello,我是一条小" + this.sex + "狗,有一个非常好听的名字,叫:“" + this.name + "”,你愿意和我做朋友吗?");
    };
    this.showcolor = function () {
        alert(this.color);
    };
    /*this.shout = function()//重写父类的函数
            {
                alert(this.name + ",哼哼叫!");
            };*/
};
Husky.extends(Dog);

var xh = new Husky("小哈", "黑白", "公");
xh.sayhello();
xh.shout();
xh.game();
xh.showcolor();
时间: 2024-10-03 14:01:19

js面向对象之继承-原型继承的相关文章

JS面向对象(二)---继承

一.面向对象的继承 1.解析:在原有对象的基础上,略作修改,得到一个新的对象,并且不影响原有对象的功能 2.如何添加继承---拷贝继承 属性:call 方法: for in /* 继承:子类不影响父类,子类可以继承父类的一些功能(代码复用) 属性的继承:调用父类的构造1函数 call 方法的继承:for in 拷贝继承 */ //父类 function CreatePerson(name,sex){ this.name = name; this.sex = sex; } CreatePerson

JS面向对象(封装,继承)

在六月份找工作中,被问的最多的问题就是: js面向对象,继承,封装,原型链这些,你了解多少? 额,,,我怎么回答呢, 只能说,了解一些,不多不少,哈哈哈哈,当然,这是玩笑话. 不过之前学过java,来理解这些还是很容易的. 所以趁着自己空闲的时间,理一理,,这些,, 一.封装 1.原始方法 1 // 通过new关键字生成一个对象,然后根据javascript是动态语言的特性来添加属性和方法,构造一个对象.其中this表示调用该方法的对象. 2 var obj = new Object(); 3

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(){

js面向对象编程(二) 构造函数继承

构造函数绑定 //基类建筑物var building = function () {    this.spec = "building";}; //address:房子地址,toward:房子朝向var house = function (address, toward) {    this.address = address;    this.toward = toward;}; //使房子继承建筑物 //使用call或者apply方法,将父对象的构造函数绑定在子对象上,在子对象构造

JS继承,原型继承,构造函数的继承,非构造函数&quot;的继承

a.原型继承 一.new运算符的缺点 用构造函数生成实例对象,有一个缺点,那就是无法共享属性和方法.比如,在DOG对象的构造函数中,设置一个实例对象的共有属性species. function DOG(name){ this.name = name; this.species = '犬科'; } 然后,生成两个实例对象: var dogA = new DOG('大毛'); var dogB = new DOG('二毛'); 这两个对象的species属性是独立的,修改其中一个,不会影响到另一个.

JS面向对象,创建,继承

1 创建一个面向对象 var obj = new Object(); //创建一个空对象obj.name = 'haha'; obj.showName = function(){     alert(obj.name); } obj.showName(); 缺点:当我们想创建多个面向对象的时候,重复代码过多,需要封装,所以有了下面的方法 2  工厂方式 function CreatePerson(name){      //原料    var obj = new Object();    //加

【原生js】js面向对象三大特征之继承笔记

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 7 </head> 8 <script> 9 //中学生 10 function MidStu(name,age){ 11 this.name=name; 12 this.ag

js面向对象(二)——继承

上一篇随笔讲了封装,这一篇我们说说继承,还是那上一篇猫和狗说事儿 function Dog(name,s){ this.name=name; this.sex=s; } Dog.prototype.type="犬科"; Dog.prototype.spack==function(){ alert("汪汪..."); } function Cat(name,s){ this.name=name; this.sex=s; } Cat.prototype.type=&qu

关于JS面向对象中原型和原型链以及他们之间的关系及this的详解

一:原型和原型对象: 1.函数的原型prototype:函数才有prototype,prototype是一个对象,指向了当前构造函数的引用地址. 2.函数的原型对象__proto__:所有对象都有__proto__属性, 当用构造函数实例化(new)一个对象时,会将新对象的__proto__属性指向 构造函数的prototype. 1 zhangsan.__proto__==Person.prototype 注:在上述代码中Person是构造函数,zhangsan则是该构造函数的一个实例化对象.