关于js 继承

js是基于原型继承的语言,意味着对象(类对象)可以直接从其他对象继承属性,而不是基于类的,该语言是无类别的。

这偏离当今编程语言的主流,大多数语言继承都是基于类的,尽管原型继承有着强大的表现力,但并不被广泛理解。

js本身对其原型的本质也缺乏信心,所以提供了一套与基于类的语言类似的对象构建语法

js原型继承的动态本质,新的方法或属性被添加到类对象的原型时,将被反映到所有的实例上,即便这个实例在添加之前(这在其他语言里就是通过类来实现的,因此

js是基于原型的继承)

荷兰程序员Gabor de Mooij提出了一种不使用this和prototype,代码部署起来非常简单的新方法,他称这种方法为"极简主义法"(minimalist approach)。

//js面向对象模拟,极简主义,避免使用prototype

var Cat={
    CreatNew:function(name){
        var cat={};
        cat.name=name;
        cat.say=function(){
            alert("Hello world !"+this.name);
        }
        return cat;
    }
};
//cat1=Cat.CreatNew("Tom");
//cat1.say();

//继承
var CfCat={
    CreatNew:function(name,age){
        var cat=Cat.CreatNew(name);
        var myselfdata='私有数据';//私有属性
        cat.age=age;
        cat.sayage=function(){
            alert("my age is "+this.age);
        };
        cat.getMySelfdata=function(){alert(myselfdata);};
        return cat;
    }
};
var cat2=CfCat.CreatNew("coofecat",22);
/*cat2.say();
cat2.sayage();
cat2.getMySelfdata();
alert(cat2.myselfdata);*/

//实例共享数据

var Person={
    Gender:"男",
    CreateNew:function(name){
        var cat={};
        cat.name=name;
        cat.sayGender=function(){
            alert(this.name+" is "+Person.Gender);
        };
        cat.changeGender=function(gender){
            Person.Gender=gender;
        };
        return cat;
    }

}
var p1=Person.CreateNew("jack");
var p2=Person.CreateNew("tom");
p1.sayGender();
p2.sayGender();
p2.changeGender("女");
p1.sayGender();
p2.sayGender();

 

原文地址:https://www.cnblogs.com/aveenzhou/p/2751349.html