对于js原型和原型链继承的简单理解(第一种,原型链继承)

 原型是js中的难点加剧点,也是前端面试官最爱问的问题之一,由于面试官能够经过被面试者对原型的理解、来判断被面试者对js的熟悉程度。前端

原型的定义面试

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

先看一下普通函数的原型this

例如:spa

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

今天看了一个视频,那位老师讲的很清晰,在此感谢自学网的燕18老师!prototype

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

function animal(){
        this.name = function(){
            document.write("我有名字<br/>");
        }
    }
    function cat(){
        this.climb = function(){
            document.write("我会爬树<br/>");
        }
    }
    function tiger(){
        this.type = function(){
            document.write("我是一直虎<br/>");
      }
    }
    cat.prototype = new animal();//这里就是继承
    tiger.prototype = new cat();
    var smtiger = new tiger();
   smtiger.climb();//这里输出“我会爬树
  smtiger.name(); //这里输出“我有名字”

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

可是!!!经过原型,tiger继承了cat,cat又继承了animal,因此:小虎会爬树,也有了名字。对象

 

js虽然没有类,可是倒是面向对象的一门脚本语言,就是由于它能够经过prototype来实现继承blog

 

这样只看表面很不切实际,也很难理解,接下来分析一下具体的prototype和_proto_的关系

 

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

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

三、animal()构造函数new一个animal对象--》这个对象的_proto_指向一个普通的object(也就是js的object“我的理解”),animal()构造函数的prototype指向普通的object对象,这个object对象有constructor的构造函数,指向animal(),因此anima实际上是转了一圈又回来指向本身,表现为aniaml;

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

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

相关文章
相关标签/搜索