您的位置:首页 > Web前端 > JavaScript

js深入研究之无法理解的js类代码,extend扩展

2015-12-16 17:41 761 查看
<script type="text/javascript">
function Person(name) {
this.name = name;
}

Person.prototype.getName = function() {
return this.name;
}

function Author(name, books) {
Person.call(this, name); // 定义:调用一个对象的一个方法,以另一个对象替换当前对象。
this.books = books; // Add an attribute to Author.
}

Author.prototype = new Person(); // 设置原型链
Author.prototype.constructor = Author; // 设置构造属性
Author.prototype.getBooks = function() { // 添加方法
return this.books;
};

var author = [];
author[0] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
author[1] = new Author('Ross Harmes', ['JavaScript Design Patterns']);

alert(author[0].getName()); //输出 Dustin Diaz
alert(author[0].getBooks()); //输出 JavaScript Design Patterns
alert(author[1].getName()); //输出 Ross Harmes
alert(author[1].getBooks()); //输出 JavaScript Design Patterns
</script>


功力不够,无法理解

进一步升级提取

<script type="text/javascript">
/* 扩展函数 */
function extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype; // F已成superClass父类
subClass.prototype = new F(); //子类继承父类的原子
subClass.prototype.constructor = subClass;
}

/* Person类 */

function Person(name) {
this.name = name;
}

Person.prototype.getName = function() {
return this.name;
}

/* Author类 */

function Author(name, books) {
Person.call(this, name);
this.books = books;
}
extend(Author, Person);

Author.prototype.getBooks = function() {
return this.books;
};

var author = []; //定义数组
author[0] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
author[1] = new Author('Ross Harmes', ['JavaScript Design Patterns']);

alert(author[0].getName()); //输出 Dustin Diaz
alert(author[0].getBooks()); //输出 JavaScript Design Patterns
alert(author[1].getName()); //输出 Ross Harmes
alert(author[1].getBooks()); //输出 JavaScript Design Patterns
</script>


进一步改进,太牛逼了,作者

<script type="text/javascript">
/* 扩展函数 */
function extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;

subClass.superclass = superClass.prototype;
if(superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
}

/* Person类 */

function Person(name) {
this.name = name;
}

Person.prototype.getName = function() {
return this.name;
}

/* Author类 */

function Author(name, books) {
Author.superclass.constructor.call(this, name);
this.books = books;
}
extend(Author, Person);

Author.prototype.getBooks = function() {
return this.books;
};

Author.prototype.getName = function() {
var name = Author.superclass.getName.call(this);
return name + ', Author of ' + this.getBooks().join(', ');
};

var author = []; //定义数组
author[0] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
author[1] = new Author('Ross Harmes', ['JavaScript Design Patterns']);

alert(author[0].getName()); //输出 Dustin Diaz , Author of JavaScript Design Patterns
alert(author[0].getBooks()); //输出 JavaScript Design Patterns
alert(author[1].getName()); //输出 Ross Harmes , Author of JavaScript Design Patterns
alert(author[1].getBooks()); //输出 JavaScript Design Patterns
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: