为什么Obj2没有从Obj1通过Object.Create()找到原型的函数

时间:2017-12-01 07:15:33

标签: javascript html object prototypal-inheritance

我试图通过 Object.create()来查看继承。我创建了Obj1并添加了一些属性&其中的方法。现在,当我在做 obj2 = object.create(obj1); 时,所有属性和方法也必须通过原型继承来实现。最后,为什么找到 obj2.findAge()没有给出结果?请有人帮忙纠正吗?

<html> 
<head></head> 
<body> 
<script> 
var obj1 = {
    name: "Peter Martin",
    age: 29,
    printName: function(){
        console.log(this.name);
    },
    printAge: function(){
        console.log(this.age);
    }
}
var obj2 = Object.create(obj1);
obj2 = {
    name: "Ronald Jane",
    printName: function(){
        console.log("Hello Dear" + this.name);
    }
}
obj1.printName();
obj1.printAge();
obj2.printName();
obj2.printAge();
</script> 
</body> 
</html> 

  

我想要做的是使用 Object.Create()来获得帮助   从Obj1到Obj2, Obj2拥有一些自己的私有属性。请帮助我在这个例子中完成这个。

1 个答案:

答案 0 :(得分:1)

Object.create之后,您已将新对象引用分配到obj2,但之后您在obj2 = { ... }时再次更改了引用,因此您丢失了最后一个引用。如果要在对象中添加其他属性,可以使用已覆盖的Object.create版本,或者只需通过.[]语法添加它。

findAge怎么样(你在帖子中提到过)我什么都看不到

var obj1 = {
    name: "Peter Martin",
    age: 29,
    printName: function(){
        console.log(this.name);
    },
    printAge: function(){
        console.log(this.age);
    }
}
var obj2 = Object.create(obj1, { 
   name: { value: 'Ronald Jane', writable: true},
   printName: { value: function() {
        console.log("Hello Dear " + this.name);
   }}
});
//obj2 = { // Here you change `obj2` to refer another object, so you have lost anything which is related to `Object.create(obj1)`
//    name: "Ronald Jane",
//   printName: function(){
//        console.log("Hello Dear" + this.name);
//    }
//}
obj1.printName();
obj1.printAge();
obj2.printName();
obj2.printAge();