Javascript设置属性功能不起作用

时间:2013-11-05 01:28:13

标签: javascript function attributes

我是Javascript和编程的开销者,我的英语不好(对不起,如果有任何语法错误),但这是我的问题:

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

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

function MyClass() {
    this.attribute;
}

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

当我尝试运行此代码时,chrome会抛出错误,说“未捕获的TypeError:对象#没有方法'setAtributte'”,指定的行为2.我不明白。

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

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');