OOP:在已经从中创建对象后更改类时会发生什么?

时间:2014-12-08 22:29:01

标签: javascript

例如:

function theClass() {
  this.foo = 'bla';
}

var theO = new theClass();

function theClass() {
  this.foo = 'lol';
}

//theO.foo = 'bla' or 'lol' when called?

theO.foo是否会成为' bla'或者大声笑'在重新定义类后调用?

2 个答案:

答案 0 :(得分:0)

它将是“lol”,因为第二个函数覆盖第一个函数。 Javascript首先解析函数。所以解析后的代码将是:

function theClass() {
  this.foo = 'bla';
}

function theClass() {
  this.foo = 'lol';
}

var theO = new theClass();

答案 1 :(得分:0)

JavaScript解释器将函数声明提升到JavaScript范围的顶部。

然后,

function theClass() {
  this.foo = 'bla';
}
var theO = new theClass();
function theClass() {
  this.foo = 'lol';
}

变为

function theClass() {
  this.foo = 'bla';
}
function theClass() {
  this.foo = 'lol';
}
var theO = new theClass();

因此,theClass会在开头被覆盖,因此theO.foo'lol'

然而,它与函数表达式有所不同:

var theClass;
theClass = function theClass() {
  this.foo = 'bla';
};
var theO = new theClass();
theClass = function theClass() {
  this.foo = 'lol';
};

在这种情况下,theClass在实例化后会被覆盖,因此theO.foo'bla'