WEB开发网
开发学院网页设计JavaScript Javascript乱弹设计模式系列(0) - 面向对象基础以... 阅读

Javascript乱弹设计模式系列(0) - 面向对象基础以及接口和继承类的实现

 2010-09-14 13:34:25 来源:WEB开发网   
核心提示: 刚才看到了var Person = new Interface("Person", [["getName", 0], ["setName", 1]]);,这里将两个参数分别保存起来;调用方法部分:Interface.registe

刚才看到了var Person = new Interface("Person", [["getName", 0], ["setName", 1]]);,这里将两个参数分别保存起来;

调用方法部分:

Interface.registerImplements = function(object) {
  if(arguments.length < 2) {
    throw new Error("接口的实现必须包含至少2个参数.");
  }
  for(var i = 1, len = arguments.length; i < len; i++) {
    var interface = arguments[i];
    if(interface.constructor !== Interface) {
      throw new Error("从第2个以上的参数必须为接口实例.");
    }
    for(var j = 0, methodsLen = interface.methods.length; j < methodsLen; j++) {
      var method = interface.methods[j][0];
      if(!object[method] || typeof object[method] !== 'function' || object[method].getParameters().length != interface.methods[j][1]) {
        throw new Error("接口的实现对象不能执行" + interface.name + "的接口方法" + method + ",因为它找不到或者不匹配.");
      }
    }
  }
};

刚才这句Interface.registerImplements(this, Person);,实际上这里是把this对象的方法名以及参数个数与刚Person保存的methods逐一进行比较,如果找不到或者不匹配,就警告错误;其中object[method].getParameters().length,调用了如下的代码:

Function.prototype.getParameters = function() {
  var str = this.toString();
  var paramString = str.slice(str.indexOf('(') + 1, str.indexOf(')')).rep
lace(/s*/g,'');   //取得参数字符串
  try
  {
    return (paramString.length == 0 ? [] : paramString.split(','));
  }
  catch(err)
  {
    throw new Error("函数不合法!");
  }
}

上一页  1 2 3 4 5 6  下一页

Tags:Javascript 乱弹 设计模式

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