我试图在 javascript 中创建一个简单的可扩展“类”,但是当在原型(prototype)中设置属性时,它告诉我原型(prototype)未定义:
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
这是一个 fiddle http://jsfiddle.net/paglia_s/z62eA/
最佳答案
只是不要使用以下方法创建您的对象: 类 = {};
但是通过使用: 类 = 函数 (){};
创建一个带有原型(prototype)的新对象..
您的代码将如下所示:
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));
关于Javascript Object.prototype 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11116840/