constructor修订问题

在模拟javascrpt类的时候需要的一项工作就是construtor重新修订问题,下面简要说一下。

//说明一下constructor作用
function C(){};
function P(){};
C.prototype=P.prototype;//把C的原型指向了P的原型
C.prototype.constructor;// function P(){}  C函数的原型的constructor是P函数。这里是原型链的内容,即C的prototype上有一个constructor属性,本来是指向C函数的。但是当C.prototype=P.prototype时,就指向了P。

其实construtor的作用就是重写原型链,方式继承的时候原型链更改到别的函数上。下面是一个例子

//父类
function Parent(){};
Parent.prototype.eating=function(){console.log("eat")};
Parent.prototype.driking=function (){console.log("drinking")};
//子类
function Children(){};
Children.prototype.playing=function(){console.log("playing")};
Children.prototype=Parent.prototype;
var children=new Children();
children.playing;//undefined

上面的代码中,没有重新修订Children函数的原型指向,所以当重新调用chilren.playing的时候,就无法通过原型链查找到对应的方法。

下面的代码是经过修订后的,就可以获取原型链上对应的方法

//父类
function Parent(){};
Parent.prototype.eating=function(){console.log("eat")};
Parent.prototype.driking=function (){console.log("drinking")};
//子类
function Children(){};
Children.prototype=Parent.prototype;
//一定要先重新修订contructor的指定,然后在在原型链prototype上挂函数。
Children.prototype.constructor=Children;
Children.prototype.playing=function(){console.log("playing")};
var children=new Children();
children.playing;//playing

最后总结一下就是,先父类===》》再子类===》》再继承父类===》》重新修订子类constructor===》》在子类原型挂接方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.继承(接口继承和实现继承) 继承是 OO 语言中的一个最为人津津乐道的概念。许多 OO 语言都支持两种继承方式...
    believedream阅读 4,556评论 0 3
  • 本章内容 理解对象属性 理解并创建对象 理解继承 面向对象语言有一个标志,那就是它们都有类的概念,而通过类可以创建...
    闷油瓶小张阅读 4,353评论 0 1
  • 博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...
    _Dot912阅读 5,313评论 3 12
  • 七夕,情人节,应景的自然要说说爱情。 倘若不逢情人节,我还是要说说爱情。 深夜了,我要说说我呀你呀他呀她呀。 自己...
    摽有梅其实七兮阅读 3,165评论 0 2
  • 日暮,归舟 凭栏 远眺孤洲 一江秋水澄如蓝 无语东流
    五月茉莉阅读 1,544评论 1 4

友情链接更多精彩内容