Javascript原型未定义而不是继承?
为什么Javascript原型未定义而不是继承?,javascript,object,prototype,Javascript,Object,Prototype,为什么example.a.c==未定义 它不应该继承原型并返回5 如果这是不可能的,是否有方法添加代码以返回原型 function test() { this.a = { b: 4 }; } test.prototype.a = { c: 5 }; var example = new test(); 当您访问“a”时,它首先在示例中找到。如果找不到,它将尝试在示例构造的原型中找到“a”。因此,它尝试访问test.ptototype.c。因此,您的代
example.a.c==未定义
它不应该继承原型并返回5
如果这是不可能的,是否有方法添加代码以返回原型
function test() {
this.a = {
b: 4
};
}
test.prototype.a = {
c: 5
};
var example = new test();
当您访问“a”时,它首先在示例中找到。如果找不到,它将尝试在示例构造的原型中找到“a”。因此,它尝试访问test.ptototype.c。因此,您的代码找不到examlpe.c。我认为您可以像这样更改代码
function test() {
this.a = {
b: 4,
c: *this.return.prototype*
};
}
示例。a
引用一个对象或另一个对象,不能直接使其从不同对象检索属性
我要做的是制作示例。一个
对象继承自另一个对象:
功能测试(){
this.a=Object.create(test.a_proto);
这个a.b=4;
}
test.a_proto={
c:5
};
var示例=新测试();
console.log(例如.a.b);//4(自有)
console.log(例如.a.c);//5(继承)
为访问原型的a.c
定义一个getter
功能测试(){
此.a={
b:4,
获取c(){
返回测试。原型。交流;
}
};
}
test.prototype.a={
c:5
};
var示例=新测试();
console.log(例如a.b);
console.log(例如a.c);
//更新原型
试验。原型。交流=10;
console.log(例如a.c)
您的原型将适用于示例.a.c
,除了this.a
优先于test.prototype.a
@Barmar,因此它不像$.extend()那样使用两个对象创建一个新对象a={b:4,c:5};?没错,原型不是递归合并的。您可以为a.c
定义一个getter,它返回this.prototype.a.c
@Barmar对它的调用是什么样子的?他想要example.a.c
,不是example.c
。如果他在创建example
后更改test.a_proto.c
,在这种情况下会发生什么?它会继续使用继承的原型,还是在您调用Object.create(test.a_proto)
时复制了一个原型?我刚刚尝试过,它会继续从原型继承。不错。@Barmar是的,测试中的更改。a_proto
的属性将被继承。但是替换test.a_proto
本身不会。
function test() {
this.a = {
b: 4
};
}
test.prototype.c = 5;
var example = new test();
console.log(example.c);//print 5