对于js原型和原型链继承的简单理解

原型的定义

Js所有的函数都有一个prototype属性,这个属性引用了一个对象,即原型对象,也简称原型。这个函数包括构造函数和普通函数,我们讲的更多是构造函数的原型,但是也不能否定普通函数也有原型。

先看一下普通函数的原型

例如:

function animal(){

}//这个函数就有原型属性,引用的对象就是object

接下来,我们通过一个构造函数的例子来了解原型。



function animal(){

        this.name =function(){

            document.write("我有名字
");

        }

    }

    function cat(){

        this.climb =function(){

            document.write("我会爬树
");

        }

    }

    function tiger(){

        this.type =function(){

            document.write("我是一直虎
");

      }

    }   cat.prototype =newanimal();//这里就是继承tiger.prototype =new cat();

    varsmtiger =new tiger();

  smtiger.climb();//这里输出“我会爬树”

smtiger.name(); //这里输出“我有名字”


我们new了一个对象小虎smtiger对象,而且在tiger的构造函数中只有一个type,它不会爬树,也没有名字;

但是!!!通过原型,tiger继承了cat,cat又继承了animal,所以:小虎会爬树,也有了名字。


js虽然没有类,但是却是面向对象的一门脚本语言,就是因为它可以通过prototype来实现继承


1、tiger()构造函数new一个tiger对象--》这个对象的_proto_指向cat对象,tiger()构造函数的prototype指向cat对象;

2、cat()构造函数new一个cat对象--》这个对象的_proto_指向animal对象,cat()构造函数的prototype指向animal对象;

3、animal()构造函数new一个animal对象--》这个对象的_proto_指向一个普通的object(也就是js的object“个人理解”),animal()构造函数的prototype指向普通的object对象,这个object对象有constructor的构造函数,指向animal(),所以anima其实是转了一圈又回来指向自己,表现为aniaml;

4、object()new一个obj对象--》这个对象的_proto_指向系统的object(应该就是window“个人理解”),object()的prototype指向系统的object对象;

5、系统的object对象指向null。

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

相关阅读更多精彩内容

友情链接更多精彩内容