【发布时间】:2016-08-09 19:17:02
【问题描述】:
我正在学习 javascript OOP,但在理解继承时遇到了问题。你能解释一下为什么这两个代码的结果不同吗? :
代码 1
function a(){}
function b(){
this.uno = "hello"}
b.prototype = new a();
function c(){
this.dos = "bye"}
c.prototype= new b();
var obj = new c();
console.log(obj.uno);
console.log(obj.dos);
console.log(obj.constructor);
输出 1
hello
bye
[function: a]
代码 2
function a(){}
function b(){
this.uno = "hola"}
b.prototype = new a();
function c(){
this.dos = "bye"}
c.prototype = {constructor:b}
var obj = new c();
console.log(obj.uno);
console.log(obj.dos);
console.log(obj.constructor);
输出 2
undefined
bye
[function: b]
我非常感谢任何有关该主题的指南。
【问题讨论】:
-
不同是因为
new b()不返回{constructor:b},所以不是一回事 -
问题是:为什么您期望它们的行为完全相同?它们明显不同。
-
即使你将一个对象分配给它自己的原型也没有任何意义。
-
我之前关于类似主题的答案之一是stackoverflow.com/a/38819813/5102631。它也说明了类似的问题。 @max 你也可以检查一下。
-
constructor属性对 Javascript 中的原型继承没有任何影响,除非您的代码明确使用它。这个question/answer 可能会有所帮助。
标签: javascript inheritance constructor prototype