0

我是 Javascript 和一般编程的初学者,我的英语不好(抱歉,如果有任何语法错误)但这是我的问题:

当我在 JS 中创建一个类并创建一个函数来设置其对象的属性时,浏览器无法识别该函数。例子:

var myObject = new MyClass();
myObject.setAttribute();

function MyClass() {
    this.attribute;
}

MyClass.prototype.setAttribute = function() {
    this.attribute = true;
};

当我尝试运行此代码时,chrome 会抛出一个错误,提示“Uncaught TypeError: Object # has no method 'setAtribute'”并且指定的行是 2。我不明白。

我再说一遍:我是一个初学者,所以这对你来说可能是一个愚蠢的错误,但对我来说这是一个很大的问题。谢谢。

4

2 回答 2

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();
于 2013-11-05T01:33:03.907 回答
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');
于 2013-11-05T01:35:22.660 回答