smo*_*ody 3 javascript scope instanceof
有人可以向我解释这种行为吗?
'use strict'
var fooFactory = function() {
function foo() {
var name = "foo object";
function getName() {
return name;
}
return {
getName: getName
}
}
function getFoo() {
return new foo;
}
return {
getFoo: getFoo,
foo: foo
}
};
var factory = new fooFactory();
var bar = factory.getFoo();
console.log("is " + bar.getName() + " instance of foo: " + (bar instanceof factory.foo));
// outputs "is foo object instance of foo: false"
Run Code Online (Sandbox Code Playgroud)
我不明白,为什么foo对象不是我在fooFactory中声明的foo构造函数的实例.
你明确地从foo函数中返回一个对象.该对象不是一个实例foo.因此bar不是一个例子foo.这就是我重写代码的方式:
var foo = fooFactory();
var bar = new foo;
console.log("is " + bar.getName() + " instance of foo: " +
bar instanceof factory.foo);
function fooFactory() {
return function () {
var name = "foo object";
this.getName = function () {
return name;
};
};
}
Run Code Online (Sandbox Code Playgroud)
我这样写它的原因如下:
new.只应调用构造函数new.此外,即使您fooFactory使用new它进行调用也绝对没有区别,因为您无论如何都明确地返回了对象文字.实际上它会慢一些.fooFactory我会假设它返回foo而不是具有foo属性的对象.newJavaScript 调用函数时,会自动创建该函数的新实例prototype并将其绑定到this函数内部.只要您没有从构造函数显式返回一个对象,this就会自动返回该函数.希望有所帮助.