javascript - js组合继承问题?
怪我咯
怪我咯 2017-04-10 18:08:40
[JavaScript讨论组]

先贴一段《javascript高级程序语言设计》上关于组合继承的代码:

function SuperType(name){
  this.name = name;
  this.colors = ["red", "blue", "green"];
}

SuperType.prototype.sayName = function(){
  console.log(this.name);
};

function SubType(name, age){
  SuperType.call(this.age);
  this.age = age;
}

SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType; //why?
SubType.prototype.sayAge = function(){
  console.log(this.age);
};

var instance1 = new SubType("Nicholas", 29);
instance1.colors.push("black");
console.log(instance1.colors); // red, blue, green, black
instance1.sayName(); // Nicholas
instance1.sayAge(); // 29

var instance2 = new SubType("Greg", 27);
console.log(instance1.colors); // red, blue, green
instance1.sayName(); // Greg
instance1.sayAge(); // 27

这里大部分我都能理解,但是中间那里,为什么需要SubType.prototype.constructor = SubType,我知道如果不这样子的话SubType.prototype.constructor的值是SuperType。但是其实不这样做也能达成继承啊,这样子做的用意是什么?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
PHPz

如你所说,继承和这一句确实没什么关系。

但是面向对象编程里除了继承,还有一个对象识别。有时你需要判断一个对象的类别,在js 里你如何获知一个对象的类别名呢?一个重要的方法就是取其constructor属性。

'str'.constructor; // function String() { [native code] }

所以,不加也可以,但加了绝对有好处。

迷茫

如果代码只是你一个用就没有什么问题,但是你的代码给别人用的话,并且他的代码使用constrcutor,就可能出现问题。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号