我是Javascript和编程的开销者,我的英语不好(对不起,如果有任何语法错误),但这是我的问题:
当我在JS中创建一个类并创建一个函数来设置其对象的属性时,浏览器无法识别该函数。例如:
var myObject = new MyClass();
myObject.setAttribute();
function MyClass() {
this.attribute;
}
MyClass.prototype.setAttribute = function() {
this.attribute = true;
};
当我尝试运行此代码时,chrome会抛出错误,说“未捕获的TypeError:对象#没有方法'setAtributte'”,指定的行为2.我不明白。
我再说一遍:我是个乞丐,所以这对你来说可能是个愚蠢的错误,但对我来说这是一个很大的问题。谢谢。
答案 0 :(得分:2)
JavaScript已“提升”您的声明,以便在变量声明之前定义MyClass
;但是你的原型更新没有被提升。更改代码的顺序
function MyClass() {
this.attribute;
}
// Prototype has to be defined BEFORE it can be used
MyClass.prototype.setAttribute = function() {
this.attribute = true;
console.log(this.attribute);
};
var myObject = new MyClass();
myObject.setAttribute();
答案 1 :(得分:0)
使用function name() {}
语法声明的函数在顶部被提升,允许您在代码中定义函数之前调用该函数,但这并不适用于所有其他行。
您的代码基本上被评估为:
var MyClass = function MyClass() {
this.attribute;
}
var myObject = new MyClass();
myObject.setAttribute(); //does not exist since it's defined on the line below
MyClass.prototype.setAttribute = function() {
this.attribute = true;
};
您只需将代码重新排序为:
//constructor declaration
//setting prototype values
var myObject = new MyClass();
myObject.setAttribute('test');