javascript 的 create
create create([superclass][, methods...]) -> Class创建一个类。 Class.create 返回一个函数,当该函数被调用时,会自动调用它自己的 initialize 方法。 从 1.6 版开始,Class.create 接受两种类型的参数。如果第一个参数是 Class,则该类作为新类的基类, 新类将会继承基类中所有的方法。否则,任何参数都被认为是一个对象,新类会复制参数对象中的方法作为新类的实例方法。 即使在子类中重写了基类已有的实例方法,子类的方法仍然能够访问基类的原始方法。只需要按照通常的方式定义子类需要重写的方法, 但将第一个参数设为 $super ,即可在该函数中使用 $super 调用基类被重写的方法。 译注:关于 $super,更详细的资料请参见这里。 如果要扩展已有的类,使用 Class.addMethods 方法。 特殊属性 类自身包含了一些特殊的属性: superclass 属性指向该类的基类(如果没有基类,则为 null)。 subclasses 属性是一个数组,该数组包含了该类的所有子类(如果没有子类,则是一个空数组)。 另外,类的实例中包括了原生的 JavaScript constructor 属性,该属性指向创建该实例的类。 样例 var Animal = Class.create({ initialize: function(name, sound) { this.name = name; this.sound = sound; }, speak: function() { alert(this.name + " says: " + this.sound + "!"); } }); // Animal 的子类 var Snake = Class.create(Animal, { initialize: function($super, name) { $super(name, 'hissssssssss'); } }); var ringneck = new Snake("Ringneck"); ringneck.speak(); //-> 提示:"Ringneck says: hissssssssss!" var rattlesnake = new Snake("Rattler"); rattlesnake.speak(); //-> 提示:"Rattler says: hissssssssss!" // 混入 Enumerable var AnimalPen = Class.create(Enumerable, { initialize: function() { var args = $A(arguments); if (!args.all( function(arg) { return arg instanceof Animal })) throw "Only animals in here!" this.animals = args; }, // 为使用 Enumerable 的方法,实现 _each _each: function(iterator) { return this.animals._each(iterator); } }); var snakePen = new AnimalPen(ringneck, rattlesnake); snakePen.invoke('speak'); //-> 提示:"Ringneck says: hissssssssss!" //-> 提示:"Rattler says: hissssssssss!" 1.6 之前 以下的描述仅针对 Prototype 1.6 之前的版本。 Class.create 返回一个函数,当该函数被调用时,会自动调用它自己的 initialize 方法。 这类似于 Ruby 风格的面向对象编程,同时也让你能够更容易的重写父类的构造器,以创建新的子类。 样例 var Animal = Class.create(); Animal.prototype = { initialize: function(name, sound) { this.name = name; this.sound = sound; }, speak: function() { alert(name + " says: " + sound + "!"); } }; var snake = new Animal("Ringneck", "hissssssssss"); snake.speak(); // -> 提示:"Ringneck says: hissssssssss!" var Dog = Class.create(); Dog.prototype = Object.extend(new Animal(), { initialize: function(name) { this.name = name; this.sound = "woof"; } }); var fido = new Dog("Fido"); fido.speak(); // -> 提示:"Fido says: woof!"
出处:http://www.cnblogs.com/liuyong/
作者喜欢研究 Sql Server ,ASP.NET MVC , Jquery WCF 等技术,同时关心分布式架构的设计应用。转载请保留原文链接,谢谢!