WEB开发网
开发学院网页设计JavaScript javascript面向对象之我解 阅读

javascript面向对象之我解

 2010-09-14 13:32:52 来源:WEB开发网   
核心提示: Function.prototype.inherit = function(baseClass) {this.prototype.base = new baseClass();for(var property in this.prototype.base) {if(!this.protot

Function.prototype.inherit = function(baseClass) {    
  this.prototype.base = new baseClass();  
  for(var property in this.prototype.base) {
    if(!this.prototype[property]) {
      this.prototype[property] = this.prototype.base[property];
    }
  }
}
Object.prototype.baseInitialize = function() {  
  if(this.base) {
    this.base.constructor.apply(this, arguments);
  }
}
Object.prototype.mixin = function(obj) {
  for(var property in obj) {
    this[property] = obj[property];
  }
  return this;
}
Object.prototype.findFuncName = function(func) {
  for(var p in this) {    
    if(this[p] == func)
      return p;
  }
  return null;
}
Object.prototype.runBase = function(args) {
  var caller = this.runBase.caller;
  var funcName = this.findFuncName(caller);
  var classType = this.constructor;
  if(classType.prototype[funcName]) {
    classType.prototype[funcName].apply(this, args);
  }
}
function showInfo(obj) {
  var info = 'type:' + typeof(obj) + 'n';
  for(var p in obj) {
    info += p + 'n';
  }
  alert(info);
}
function class1(astr) {
  this.a = astr;
  this.m = function() {
    this.a = 'hello';
  }
}
function class2() {  
  this.baseInitialize('class2');
  this.m = function() {
    this.runBase();
    alert(this.a);
  }
}
class2.inherit(class1);
function test() {  
  var c1 = new class2();  
  alert(c1.constructor);
  c1.m();  
}

使用的时候需要遵守几个规范:

1、所有类的方法都用内联的方式定义,可以最大限度减少继承的副作用;

2、暂时没有,将来增加。

PS:这篇文章已经写了三天了,边写边想,越想越多,自觉有不少收获。另外,前些日子看了下ruby,把js与ruby作对比,同时加深了我对这两种语言的理解,感觉不错。其他的还没有想到。如果我的任何认识有任何不正确的地方,希望斧正,谢谢!

博客:http://homer.cnblogs.com/

上一页  3 4 5 6 7 8 

Tags:javascript 面向 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接