JS prototype原型

每个函数/对象都有一个prototype(原型)属性

指针指向的就是prototype对象

所有创建在prototype上的属性和方法

都将被所有对象实例分享

构造函数和原型混合使用

使用构造函数定义对象的属性,使用原型(prototype)定义对象的方法,这样就可以做到属性私有,方法共享

书写语法     构造函数名.prototype.xxx = xxx ;

function Dog(type){
        this.type=function(){
            console.info("类型:"+type);
        };
    }
    Dog.prototype.name="我是小狗"
    var pp = new Dog("大型犬");
    var cc = new Dog("小型犬");
    console.info(pp.name==cc.name);
    pp.type()
    cc.type()

继承

    function Animal(name) {
            this.name = name;
            this.eat = function () {
                console.info("动物吃东西了!");
            }
        }
    function Dog(name) {
            this.name = name;
        }
        Dog.prototype = new Animal("狗");
        var erHa = new Dog("哈士奇");
        console.info(erHa.name);// 输出“哈士奇”
        delete erHa.name;
        console.info(erHa.name);// 输出“狗”
        delete Dog.prototype.name;
        console.info(erHa.name);// 输出“undefined”
        erHa.eat();// 输出“动物吃东西了!”
        erHa.eat = function () {
            console.info("狗吃肉!");
        }
        erHa.eat();// 输出“狗吃肉!”

原型链 层层指向父原型的关系,可以用来查找对象之间的继承关系

 function a(x){
        this.x=x;
    }
    a.prototype.x=0;
    function b(x){
        this.x=x;
    }
    b.prototype=new a(1);
    function c(x){
        this.x=x;
    }
    c.prototype=new b(2);
    var d = new c(3);
    console.info(d)
    console.info(d.x)
    delete d.x
    console.info(d.x)
    delete c.prototype.x
    console.info(d.x)
    delete b.prototype.x
    console.info(d.x)
    delete a.prototype.x
    console.info(d.x)

猜你喜欢

转载自blog.csdn.net/sugang666/article/details/86243113
今日推荐