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