我正在试验继承和创建对象,这让我感到困惑。
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的意义是什么?
答案 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