Javascript 我不能理解这一点

Javascript 我不能理解这一点,javascript,hoisting,executioncontext,Javascript,Hoisting,Executioncontext,正在尝试学习Js,但无法理解DOM元素未获得值的原因: 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(); doc

正在尝试学习Js,但无法理解DOM元素未获得值的原因:

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没有被执行(除非我把它放在文件的顶部)。为什么呢

片段:

未执行(除非我将其放在文件顶部)

通常,这表示上述代码中存在错误。代码在执行这一行之前崩溃

检查一下那把小提琴的控制台日志,你会发现

哦,吊运和这里发生的事无关

未执行(除非我将其放在文件顶部)

通常,这表示上述代码中存在错误。代码在执行这一行之前崩溃

检查一下那把小提琴的控制台日志,你会发现


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

你还没有定义什么是移动:

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;
};
或者通过将功能正确添加到原型:

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++;
}

您尚未定义什么是移动:

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;
};
或者通过将功能正确添加到原型:

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++;
}

是的,我刚刚将它的id命名为“id”:)很抱歉混淆了。您可以创建一个代码笔/代码段,通过编辑您的问题并按下“代码段”按钮来复制您的问题吗。正如您看到的,第一个未定义,但第二个div没有任何值..谢谢@Sergio Tulentsev-我会记住这一点是的,我刚刚将其id命名为“id”:)很抱歉混淆,您可以创建一个代码笔/代码段,通过编辑您的问题并按下“代码段”按钮来复制您的问题吗。正如你看到的,第一个未定义,但第二个div没有任何价值。谢谢@Sergio Tulentsev-我会记住这一点谢谢,现在我明白了,汉克斯,现在我明白了,是的,好的。我还可以保留我的模式
Car.prototype={move:function(){this.loc++;}
只需要从构造函数中删除
obj.move=move
。@rordevnewb是的,很抱歉我稍微更改了将函数添加到构造函数的语法,但没有理由不使用您的,问题是构造函数中对
move
的引用。是的,我明白-我只是在学习,这个模式是网景统治世界时使用的:)谢谢你的解释!啊,是的,好的。我还可以保留我的模式
Car.prototype={move:function(){this.loc++;}
只需要从构造函数中删除
obj.move=move
。@rordevnewb是的,很抱歉我稍微更改了将函数添加到构造函数的语法,但没有理由不使用您的,问题是构造函数中对
move
的引用。是的,我明白-我只是在学习,这个模式是网景统治世界时使用的:)谢谢你的解释!