Javascript 模拟 Actionscript 的面向对象

内容纲要

由于Javascript没有类,所以尝试模拟一下Actionscript的类,以达到面向对象的效果:

//类的定义

//方法一:类的一般定义方法

function player1(_name) 

{ 

this.name = _name; 

this.say = function() {alert(this.name);}; 

} 

var p1 = new player1('llinzzi1'); 

p1.say(); 

//方法二:prototype定义方法

var player2 = function() {} 

player2.prototype = { 

name:'', 

say:function(){ 

alert(this.name); 

} 

} 

var p2 = new player2(); 

p2.name = 'llinzzi2'; 

p2.say(); 

//方法三:上面的方法结构美观,便捷,但构建函数不能带参数,修改方法

var player3 = function() { 

this.init.apply(this, arguments); 

} 

player3.prototype = { 

init:function(_name){ 

this.name = _name; 

}, 

say:function(){ 

alert(this.name); 

} 

} 

var p3 = new player3('llinzzi3'); 

p3.say(); 

//类的继承

//方法一

var player4 = function(){ 

this.init.apply(this, arguments); 

} 

player4.prototype = new player3; 

player4.prototype.shout = function(){ 

alert(this.name.toUpperCase()); 

} 

var p4 = new player4('llinzzi4'); 

p4.shout(); 

//方法二 上面的方法不能采用{}的方法,修改方法

Object.extend = function(destination, source) { 

for (var property in source) 

destination[property] = source[property]; 

return destination; 

}; 

var player5 = function(){ 

this.init.apply(this, arguments); 

} 

Object.extend(Object.extend(player5.prototype,player3.prototype),{ 

shout:function(){ 

alert(this.name.toUpperCase()); 

} 

}); 

var p5 = new player5('llinzzi5'); 

p5.shout(); 

//再从prototype.js抄一端浏览器判断代码 

Browser = { 

IE:     !!(window.attachEvent && !window.opera), 

Opera:  !!window.opera, 

WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, 

Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1, 

MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) 

} 

alert(Browser.MobileSafari); 

同是Ecmascript 262标准,Actionscript比Javascript好用太多了!

发表评论

您的电子邮箱地址不会被公开。