构造函数或类在JS代码中的正确位置是什么?

时间:2019-01-27 16:03:37

标签: javascript sorting variables constructor prototype

由于构造函数本质上是一个存储为副本的对象,因此看起来它们就像变量一样,因为它们在代码中不能仅仅是“ Anywhere”,例如带有函数?

因此,它们基本上需要位于构造函数被调用的位置或代码中的原型之上,否则它们将是未定义的或未被发现的...

别人能为我确认情况确实如此吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

在JavaScript中,声明为hoisted,使代码执行时就像将这些声明实际写在其包围范围的顶部一样。声明可以是变量声明或函数声明。因此,您可以以一种似乎在声明之前就使用某种东西的方式来编写代码,但是实际上,由于吊装,您并不是这样。

变量声明吊装:

console.log(x); // undefined because x hasn't been initialized, but has been declared
var x = "test";
console.log(x); // "test" because the assignment has now been processed

console.log(y); // error because y has never been decalred

功能声明悬挂:

foo();  // "hello from foo" because the entire function declaration was hoisted.
 
function foo(){
  console.log("hello from foo");
}

Classes are not hoisted,因此在使用它们之前必须先编写它们。

类吊装尝试:

const p = new Rectangle(); // ReferenceError

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

就是这么简单。

答案 1 :(得分:0)

变量只是存储和引用值的一种手段。对象是一种值的类型。函数是一种对象。构造函数是一种设计为使用new关键字调用的函数(它将创建一个对象并在其上建立原型链)。

要调用构造函数,您需要有权访问该值。这可以通过变量(通常是)来实现。

该变量必须包含构造函数,然后才能引用它。


函数 declaration 是创建函数的一种方法,该函数可以是构造函数,它是提升的,允许在代码中更早地使用它。出现。


但是,构造函数通常在原型中添加了许多方法,而在下面的示例中并未使用这些方法:

  1. 成功创建了dog实例
  2. 尝试吠叫失败,因为尚未进行对prototype.bark的分配

var fido = new Dog("Fido");
fido.bark();

function Dog(name) {
    this.name = name;
}

Dog.protype.bark = function () {
    alert(`Woof! I'm ${this.name}`);
}