Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 让o1.prototype=Object.create(o2.prototype)和o1.prototype=o2.prototype有什么区别?_Javascript_Inheritance_Assign - Fatal编程技术网

Javascript 让o1.prototype=Object.create(o2.prototype)和o1.prototype=o2.prototype有什么区别?

Javascript 让o1.prototype=Object.create(o2.prototype)和o1.prototype=o2.prototype有什么区别?,javascript,inheritance,assign,Javascript,Inheritance,Assign,所以我试图理解o1.prototype=Object.create(o2.prototype)和o1.prototype=o2.prototype之间的区别 根据对的回答,前者将obj2.prototype设置为obj1.prototype的prototype,但我很难理解您为什么要这样做(例如,新原型的原型就是Object.prototype,因为原型是一个没有进一步继承的对象)。此外,这个问题的答案似乎并不总是如此 例如,在以下代码中: function o1(){} o1.prototyp

所以我试图理解
o1.prototype=Object.create(o2.prototype)
o1.prototype=o2.prototype
之间的区别

根据对的回答,前者将obj2.prototype设置为obj1.prototype的prototype,但我很难理解您为什么要这样做(例如,新原型的原型就是Object.prototype,因为原型是一个没有进一步继承的对象)。此外,这个问题的答案似乎并不总是如此

例如,在以下代码中:

function o1(){}
o1.prototype.test = "test";
function o2(){}
o2.prototype = Object.create(o1.prototype);
let instance1 = Object.create(o1);
console.log(o2.prototype.test, instance1.prototype.test);
o2.prototype.test
instance1.prototype.test
打印
“test”
。因此,您是否直接将
o2
分配给
Object.create(o1.prototype)
或将
o2
的原型设置为
Object.create(o1.prototype)
似乎无关紧要

另外,如果我理解正确,根据链接问题中的答案,如果
o1
为空(在本例中为空),则设置
o2=o1
将与设置
o2=Object.create(o1)
相同,也与

function o1(){};
function o2(){};
o2.prototype = o1.prototype;

这三者之间有显著差异吗?另外,如果
o2.prototype=Object.create(o1.prototype)
o1.prototype
的原型创建为自己的原型的空对象,如果
o1
的原型不是空的,那么如何将
o1
的原型的成员导入到
o2
的原型中呢?

如果您直接将
Parent.prototype
指定给子对象的原型,它们将指向同一个对象。因此,如果您添加一个只适用于子类的方法,那么父对象也可以访问它们,因为
Parent.prototype==child.prototype

例如:

function Animal(){};
Animal.prototype.Eat=函数(){
console.log(“吃”)
}
函数Human(){};
Human.prototype=Animal.prototype;//两者都指向同一个对象
Human.prototype.Drive=函数(){
控制台日志(“驱动”)
}
var动物=新动物();
var human=新人类();
动物。吃();
人类。吃();
animal.Drive();//动物不应该开车
人类驱动力();

console.log(“人类的动物实例:,人类的动物实例)//true
所以换句话说,对象是js中的引用类型?@TaraStahler yes。我已经添加了一些关于原型链逻辑的更多信息。好吧,这更有意义,在我自己做了一些测试之后,如果我有误解,请纠正我,因为原型的原型也是原始对象原型的一部分。“我很难理解你为什么想要它”-你不会想要它,没错:-)而不是
instance1=Object.create(o1),您可能打算执行
instance1=new o1()(它执行
Object.create(o1.prototype)
)。