const bar = new Bar(); // it‘s ok function Bar() { this.bar = 42; } const foo = new Foo(); //Cannot access ‘Foo‘ before initialization //初始化前不能访问Foo //说明在这行代码下面的Foo的声明被提升了,只是还没有初始化 //与var变量的提升作对比,var变量的提升会初始化为undefined class Foo { constructor() { this.foo = 42; } }
// 引用一个未声明的变量 function Bar() { baz = 42; // it‘s ok,调用后会自动声明为一个全局变量 } const bar = new Bar(); class Foo { constructor() { fol = 42; // ReferenceError: fol is not defined } } const foo = new Foo();
// 引用一个未声明的变量 function Bar() { this.bar = 42; } Bar.answer = function() { return 42; }; Bar.prototype.print = function() { console.log(this.bar); }; const barKeys = Object.keys(Bar); // [‘answer‘] const barProtoKeys = Object.keys(Bar.prototype); // [‘print‘] class Foo { constructor() { this.foo = 42; } static answer() { return 42; } print() { console.log(this.foo); } } const fooKeys = Object.keys(Foo); // [] const fooProtoKeys = Object.keys(Foo.prototype); // []
function Bar() { this.bar = 42; } Bar.prototype.print = function() { console.log(this.bar); }; const bar = new Bar(); const barPrint = new bar.print(); // it‘s ok class Foo { constructor() { this.foo = 42; } print() { console.log(this.foo); } } const foo = new Foo(); const fooPrint = new foo.print(); // TypeError: foo.print is not a constructor
function Bar() { this.bar = 42; } const bar = Bar(); // it‘s ok class Foo { constructor() { this.foo = 42; } } const foo = Foo(); // TypeError: Class constructor Foo cannot be invoked without ‘new‘
function Bar() { Bar = ‘Baz‘; // it‘s ok this.bar = 42; } const bar = new Bar(); // Bar: ‘Baz‘ // bar: Bar {bar: 42} class Foo { constructor() { this.foo = 42; Foo = ‘Fol‘; // TypeError: Assignment to constant variable } } const foo = new Foo(); Foo = ‘Fol‘; // it‘s ok
转自:https://blog.csdn.net/qq_43540219/article/details/108174314
原文:https://www.cnblogs.com/vickylinj/p/14433761.html