Javascript Object.prototype未定义
我试图在javascript中创建一个简单的可扩展“类”,但当在原型中设置属性时,它表明原型未定义:Javascript Object.prototype未定义,javascript,oop,class,object,Javascript,Oop,Class,Object,我试图在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(re
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
记录的“结果”具有“用户名”和“密码”属性
另外,它只在IE>8时有效
这是一把小提琴,你有打字错误<代码>结果。protorype[key]应该是
结果。prototype[key]
您有一个打字错误<代码>结果。protorype[key]应该是结果。prototype[key]
只是不要使用以下方法创建对象:
类={}
但通过使用:
类=函数(){}
这将创建一个具有原型的新对象
您的代码如下所示:
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));
只是不要使用以下方法创建对象: 类={} 但通过使用: 类=函数(){} 这将创建一个具有原型的新对象 您的代码如下所示:
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));
result.protorype[key]=obj[key]代码>或结果。原型[key]=obj[key]代码>?@HackedByChinese没有,它是手工创建的结果。protorype[key]=obj[key]代码>或结果。原型[key]=obj[key]代码>?@HackedByChinese否它是由handsee构建的控制台此处,“a”正常工作,但在“b”中,用户名不会被覆盖,因为原始用户名位于协议中。在我的控制台中,a具有密码和用户名属性以及原型。对于b,我得到用户名和原型。对于c,我得到原型(继承的函数),对于d,我得到用户名,在原型用户名和密码(来自a)和原型(getByUsername和getto)。。这不是您想要的?例如,在b中,原型内部有来自a的用户名和密码,它们应该在外部,并且使用来自b的用户名而不是来自a的原始用户名,如果您希望它们是可重写的共享属性,则需要将所有数据放在原型中。。类似于这样:请参见此处的控制台,“a”正确工作,但在“b”中,用户名不会被覆盖,因为原始用户名位于协议中。在我的控制台中,a具有密码和用户名属性以及原型。对于b,我得到用户名和原型。对于c,我得到原型(继承的函数),对于d,我得到用户名,在原型用户名和密码(来自a)和原型(getByUsername和getto)。。这不是您想要的?例如,在b中,原型内部有来自a的用户名和密码,它们应该在外部,并且使用来自b的用户名而不是来自a的原始用户名,如果您希望它们是可重写的共享属性,则需要将所有数据放在原型中。。像这样: