JavaScript面向对象编程

  //类的定义

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

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