(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
Java代码
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)var PersonClass=function(name,gender){ this.name=name; this.gender=gender; alert("My name is "+this.name); } var myGirlFriend=new PersonClass('Vickey','female');
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
var PersonClass=function(name,gender){this.name=name;this.gender=gender;alert("My name is "+this.name);}var myGirlFriend=new PersonClass('Vickey','female');
执行 后, 会创建一个PersonClass类的实例myGirlFriend, 并执行function内的语句.
那些语句可以理解为是类的构造函数.
Prototype
现在来看看在prototype的帮助下如何去定义这个类:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
Java代码
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)var PersonClass = Class.create(); PersonClass.prototype.initialize=function(name,gender){ this.name=name; this.gender=gender; alert("My name is "+this.name); }; var myGirlFriend=new PersonClass('Vickey','female'); //如果想给类增加属性和方法时使用 PersonClass.prototype.XXX=...; //或者是使用 prototype提供的 Object.extend(PersonClass.prototype, {...} );
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
var PersonClass = Class.create();PersonClass.prototype.initialize=function(name,gender){this.name=name;this.gender=gender;alert("My name is "+this.name);};var myGirlFriend=new PersonClass('Vickey','female');//如果想给类增加属性和方法时使用 PersonClass.prototype.XXX=...;//或者是使用 prototype提供的 Object.extend(PersonClass.prototype, {...} );
(关于Object.extend稍后在对比继承机制时再细说.)
再来看看prototype是实现类机制的核心代码.
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
Java代码
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } }
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
var Class = { create: function() {return function() { this.initialize.apply(this, arguments);} }}
通过看代码不难看出,prototype的Class实际上只是帮助我们抽象出了"类的构造函数".
而当我们在prototype的这种机制下进行类的定义时,实际上带来的好处是非常有限的.
prototype的Class只是从结构对我们的类进行了重新规划. 而这样的规划意义并不是很大.
而且prototype带有强制性,即, initialize 是必须要定义的.
实际上这里存在一个缺陷, Class应该提供一个默认的initialize(一个空函数就好),
或者是在create返回的function里进行必要的判断.
(prototype1.6的类机制变化比较大,但是还没仔细研究过,所以不敢轻易评论).
Mootools
现在来看看在 moo的帮助下如何去定义一个类:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
Java代码
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)var PersonClass = new Class( { initialize: function(name,gender){ this.name=name; this.gender=gender; alert("My name is "+this.name); } }); var myGirlFriend=new PersonClass('Vickey','female');
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
var PersonClass = new Class( {initialize: function(name,gender){this.name=name;this.gender=gender;alert("My name is "+this.name);}});var myGirlFriend=new PersonClass('Vickey','female');
其中类的 initialize 不是必须的.
如果你想给 PersonClass 增加属性和方法,你可以在new Class的参数里直接以 json方式定义.
也可以使用 如下方式
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
Java代码
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)PersonClass.implement ({ age:0 , getName : function() {return this.name;} } , {...}, ..... );
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
PersonClass.implement ({ age:0 ,getName : function() {return this.name;}} , {...}, ..... );
implement支持多个{}.关于implement稍后在对比继承机制时再细说.
猜你喜欢