小编Cha*_*ins的帖子

Javascript数组成员变量未使用Prototype方法定义

在下面的代码中,pushElement方法在处理"words"变量时工作正常,但是一旦我运行popElement方法,它就会在"this.words.length"上失败并出现以下错误:"Uncaught TypeError" :无法读取未定义的属性"长度".

有任何想法吗?

function AnimationStack() {
    this.words = [];
}

AnimationStack.prototype.pushElement = function(element) {
    this.words.push(element);
}

AnimationStack.prototype.popElement = function() {
    if (this.words.length>0) {
        var element = this.words.shift();
        return element;
    } else {
        return null;
    }
}

var AS = new AnimationStack();

var element = $("<div></div>");
AS.pushElement(element); // works perfect
AS.pushElement(element); // works perfect
AS.pushElement(element); // works perfect

var pop = AS.popElement(); // always fails
Run Code Online (Sandbox Code Playgroud)

编辑:上面的代码是完美的.在我实际执行的方式中,我使用上面的代码.我正在使用setInterval调用popElement()来改变"this"的范围.阅读完整的答案:

http://forrst.com/posts/Javascript_Array_Member_Variable_is_Undefined_wi-g6V

javascript arrays oop prototype

5
推荐指数
1
解决办法
1190
查看次数

处理包含由事件监听器调用的"this"关键字的Object方法中的Scope

我把这种情况的缺乏理解归结为这个小问题.到目前为止,我认为这是我所知道的:

我有一个对象myDog(一个全局变量).Dog有一个成员变量el是一个html元素; 因为它是一个元素,我可以添加事件监听器.因此,当您单击时myDog.el,它会向控制台记录this.name和的值myDog.name.正如预期的那样,范围this.name是未定义的并且myDog.name是'tye'.当由click事件监听器调用时,this内部Dog.speak引用被单击的元素,即成员变量el,而不是对象Dog.由于它myDog是一个全局变量,因此无论函数的范围如何,它都可以进行备份,并且可以myDog.name很好地完成.

见下面的代码:

function Dog(name,id) {
    this.name = name ? name : "spot";
    this.id = id ? id : "dog";
    this.el = document.getElementById(this.id); // given there is a div with a matching    
    this.el.addEventListener("click",this.speak); // ignore IE for simplicity (attachEvent has its own 'this' scope issues)
}

Dog.prototype = {
    speak: function() …
Run Code Online (Sandbox Code Playgroud)

javascript oop events scope

4
推荐指数
1
解决办法
570
查看次数

标签 统计

javascript ×2

oop ×2

arrays ×1

events ×1

prototype ×1

scope ×1