我正在尝试在javascript中创建一个简单的可扩展“类”,但是当在原型中设置属性时,它会告诉原型是未定义的:
Class = {};
Class.extend = function(obj) {
var result = Object.create(this);
if (obj) {
for (var key in obj) {
if(typeof obj[key] == 'function'){
console.log(result);
result.protorype[key] = obj[key];
}else{
result[key] = obj[key];
};
};
result.prototype.constructor = result;
}
return result;
}
var a = Class.extend({
username: "matteo",
password: "nn te la dico",
getByUsername: function() {
return this.username;
}
});
console.log(a, Class.isPrototypeOf(a));
在定义“a”时尝试设置属性“getByUsername”时会出现问题,如果你看一下它会报告的控制台:
Uncaught TypeError: Cannot set property 'getByUsername' of undefined
记录的“结果”具有“用户名”和“密码”属性。
P.S它仅适用于IE> 8
答案 0 :(得分:2)
你有一个错字。 result.protorype[key]
应为result.prototype[key]
答案 1 :(得分:2)
不要使用以下方法创建对象: Class = {};
但是通过使用: Class = function(){};
使用原型创建一个新对象..
您的代码将如下所示:
Class = function(){};
Class.extend = function(obj) {
var result = Object.create(this);
if (obj) {
for (var key in obj) {
if(typeof obj[key] == 'function'){
console.log(result);
result.prototype[key] = obj[key];
}else{
result[key] = obj[key];
};
};
result.prototype.constructor = result;
}
return result;
}
var a = Class.extend({
username: "matteo",
password: "nn te la dico",
getByUsername: function() {
return this.username;
}
});
console.log(a, Class.isPrototypeOf(a));