Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript原型未定义而不是继承?_Javascript_Object_Prototype - Fatal编程技术网

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