2017-05-25 60 views
0

努力学习JS和无法理解为什么DOM元素没有得到值:的Javascript吊装 - 无法理解这

var Car = function(loc) { 
    var obj = Object.create(Car.prototype); 
    obj.loc = loc; 
    obj.move = move; 
    return obj; 
}; 

Car.prototype = { 
    move : function() { 
    this.loc++; 
    } 
}; 

var emy = Car(1); 
emy.move(); 

document.getElementById("id").innerHTML = emy.loc; 

所以我创建一个类构造函数及其原型对象,但最后一行 - document.getElementById("id").innerHTML = emy.loc;没有被执行(除非我把它放在文件的顶部)。这是为什么?

段:

https://jsfiddle.net/awj6mf1b/

+0

是的,我刚刚将它的ID“ID” :)对不起,混乱 –

+0

您可以创建一个codepen /片断它通过编辑你的问题,按下按钮片段添加 –

+0

复制您的问题。正如你看到第一次得到undefined,但第二次div没有任何价值.. –

回答

2

还没有定义什么招是:

var Car = function(loc) { 
    var obj = Object.create(Car.prototype); 
    obj.loc = loc; 
    obj.move = move; // <<< Here 
    return obj; 
}; 

给错误:

var Car = function(loc) { 
    var obj = Object.create(Car.prototype); 
    obj.loc = loc; 
    obj.move = function() { 
    this.loc++; 
    } 
    return obj; 
}; 

Uncaught ReferenceError: move is not defined 
    at Car (VM52:51) 
    at window.onload (VM52:61) 

您可以通过instatiation期间只把功能在你的对象解决这个问题

或通过正确添加功能到原型:

var Car = function(loc) { 
    var obj = Object.create(Car.prototype); 
    obj.loc = loc; 
    // Removed move from here 
    return obj; 
}; 

// This adds move to the cars prototype 
Car.prototype.move = function() { 
    this.loc++; 
} 
+0

啊,是的,好的。我也可以保留我的模式'Car.prototype = {0121}}} } };'只需要从构造函数中删除'obj.move = move' ... –

+0

@rordevnewb是的,对不起,我稍微改变了将函数添加到构造函数的语法,但没有理由不使用你的,问题是在构造函数中引用“move”。 –

+0

是的,我明白 - 我只是在学习,当Netscape统治世界时,这种模式才被使用:)感谢您的解释! –

1

is not being executed (unless I put it in the top of the file)

一般指示误差的存在下,在上面的代码。该代码在执行该行之前崩溃。

检查该提琴的控制台日志,你会看到。

哦,和提升无关,这里发生的事情。

+0

谢谢,现在我明白了 –