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)
)。