在javascript中返回一些值的函数上使用new?

时间:2013-12-25 07:54:23

标签: javascript

我正在试验继承和创建对象,这让我感到困惑。

a = function (){console.log("test"); return "hello"};
b = new a();
//console output
 test VM719:2
 a {}

这是什么意思?这是否意味着b包含?若然后,如果我这样做

console.log(b.a);
//console output 
 undefined
 undefined

为什么会这样? 其次,如果我这样做

b.__proto__
//console output 
 Object {}
a.prototype.test ="hello";
b.__proto__
//console output 
 Object {test: "hello"}

这很好,因为新原因导致原型指向a。

console.log(b);
//console output
 a {test: "hello"}

此输出是什么意思?当我记录b.test时,它给出了#34;你好"但是当我记录b.a时,它会给出" undefined"那么输出控制台中a的意义是什么?

2 个答案:

答案 0 :(得分:6)

如果构造函数返回任何内容,null或任何原子/非对象值,则忽略所述值,并将新创建的对象引用返回给调用者。所以你在控制台中看到对象的构造函数......

答案 1 :(得分:3)

a {}表示a的对象实例,因为您使用new创建了一个实例。在您的案例prototype中,该对象的属性是与所有其他实例共享的test属性。必须在构造函数中创建实例属性,如下所示:

function A() {
  this.prop = 'hello';
}

A.prototype.test = function(){}; // shared with other instances

var b = new A();
b.prop; //=> 'hello' // unique to this instance