2017-05-25 57 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

謝謝,現在我明白了 –