最近在读悟透javascript ,作者李战大师把甘露原型写的真棒,我用了一晚上时间去理解消化,终于消化了一部分,也许是偶太笨了,居然用了那么久,反复看,最后很多地方不明白就到群里咨询,多亏jquery群得 “天满流云,一路彷徨”2位老大的帮忙,让我对javascript prototype有了进一步的了解. 不废话了,出代码吧~ 本来甘露原型是有接口方法的,因为我现在项目不需要接口,继承类,所以我去掉了,只是针对项目做了简单的改写~~
var Person = Class({
create1: function (name) {
this.name = name;
},
sayhello: function () {
alert('sayhello:' + this.arg[0])
}
});
function Class() {
var defines = arguments[arguments.length-1]; //读取最后一个作为类
if(!defines) return;
function prototype_() {}//构造临时函数
var aPrototype = new prototype_();//建立类要用到的对象.
for(var member in defines) {//复制类到临时函数 过滤create
if (member != 'create') {
aPrototype[member] = defines[member]
}
}
if (defines.create) {//如果构造函数存在就直接用
var aType = defines.create;
} else {//不存在 则建立构造函数
var aType = function () {
/*
* 遍历 参数
* 接收形势 this.arg[0]
**/
var arg = [];
for(var i=0, max=arguments.length; i<max; i++) {
arg[i] = arguments[i];
}
this.arg = arg;
}
}
aType.prototype = aPrototype;//将类 继承到构造函数
return aType;//返回create 函数,这里已经 create已经有相关继承类了,返回函数直接实例化即可.
}
var P = new Person('zhangliang', '11', '22');
P.sayhello();
最近在读悟透javascript ,作者李战大师把甘露原型写的真棒,我用了一晚上时间去理解消化,终于消化了一部分,也许是偶太笨了,居然用了那么久,反复看,最后很多地方不明白就到群里咨询,多亏jquery群得 “天满流云,一路彷徨”2位老大的帮忙,让我对javascript prototype有了进一步的了解. 不废话了,出代码吧~ 本来甘露原型是有接口方法的,因为我现在项目不需要接口,继承类,所以我去掉了,只是针对项目做了简单的改写~~
var Person = Class({
create1: function (name) {
this.name = name;
},
sayhello: function () {
alert('sayhello:' + this.arg[0])
}
});
function Class() {
var defines = arguments[arguments.length-1]; //读取最后一个作为类
if(!defines) return;
function prototype_() {}//构造临时函数
var aPrototype = new prototype_();//建立类要用到的对象.
for(var member in defines) {//复制类到临时函数 过滤create
if (member != 'create') {
aPrototype[member] = defines[member]
}
}
if (defines.create) {//如果构造函数存在就直接用
var aType = defines.create;
} else {//不存在 则建立构造函数
var aType = function () {
/*
* 遍历 参数
* 接收形势 this.arg[0]
**/
var arg = [];
for(var i=0, max=arguments.length; i<max; i++) {
arg[i] = arguments[i];
}
this.arg = arg;
}
}
aType.prototype = aPrototype;//将类 继承到构造函数
return aType;//返回create 函数,这里已经 create已经有相关继承类了,返回函数直接实例化即可.
}
var P = new Person('zhangliang', '11', '22');
P.sayhello();