js深入研究之自定义混合Mixin函数

<script type="text/javascript">
/* 增加函数 */

function augment(receivingClass, givingClass) {
  for(methodName in givingClass.prototype) { 
    if(!receivingClass.prototype[methodName]) {
      receivingClass.prototype[methodName] = givingClass.prototype[methodName];
    }
  }
}

/* 改进的增加函数 */

function augment(receivingClass, givingClass) {
  if(arguments[2]) { // Only give certain methods.
    for(var i = 2, len = arguments.length; i < len; i++) {
      receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]];
    }
  } 
  else { // Give all methods.
    for(methodName in givingClass.prototype) { 
      if(!receivingClass.prototype[methodName]) {
        receivingClass.prototype[methodName] = givingClass.prototype[methodName];
      }
    }
  }
}


var Author = function Author(name, books) { // 构造函数
  this.name = name;
  this.books = books || 'default value';
};

Author.prototype = {
  getName: function() {
    return this.name;
  },
  getBooks: function() {
    return this.books;
  }
};

var Editor = function Editor() {
};
Editor.prototype = {
  hello: function() {
    return 'Hello,'+this.name;
  }
};

augment(Author, Editor);

var author = new Author('Ross Harmes', ['JavaScript Design Patterns']);
console.log(author.getName());
console.log(author.getBooks());
console.log(author.hello());
</script>

结果

经过拼接处理之后,author就获取到了hello方法了,属性还是自己的name。

posted @ 2015-12-19 16:21  TBHacker  阅读(591)  评论(0编辑  收藏  举报