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

JS类的实现

2015-09-17 17:39 609 查看
1个月前写过最简单的那种,再重新实现一遍

//类的实现,一个参数创建类,两个参数继承类
var Klass = function (parent, options) {
var
hasOwn = Object.prototype.hasOwnProperty,
isFunc = function(obj) {
return typeof obj === 'function';
},
//中间函数避免执行父类构造函数
Func = function () {
},//返回的子类
Child = function () {
isFunc(this.initialize) && this.initialize.apply(this, arguments);
},
k;

//参数check
if (arguments.length === 0 || arguments.length > 2) throw new Error("只接受1个或2个参数");
//只传入一个参数对象
if (!isFunc(parent)) {
options = parent;
parent = null;
}
//继承父类
if (parent) {
Func.prototype = parent.prototype;
Child.prototype = new Func();
Child.superproto = parent.prototype;
Child.prototype.constructor = Child;
}
//添加options
for (k in options) {
if(hasOwn.call(options, k)) Child.prototype[k] = options[k];
}

return Child;
};

//测试
var Person = Klass({
initialize: function(opt) {
this.name = 'unnamed';
$.extend(this, opt);
},
getName: function () {
return this.name;
},
say: function() {
console.log("hello world");
}
}),
Player = Klass(Person, {
play: function () {
console.log("i'm playing " + this.game);
}
}),

player1 = new Player({
name: 'bobo',
game: 'Dota2'
});

player1.play();  // "i'm playing Dota2"
player1.say();   // "hello world"
console.log(player1.getName());   // "bobo"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: