博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原型,原型对象,原型链,构造函数,继承(一)
阅读量:4971 次
发布时间:2019-06-12

本文共 2334 字,大约阅读时间需要 7 分钟。

前言:javascript中 万物皆对象 , 但是对象是有区别的 分为普通对象(object)和函数对象(function):

  ①由以下三种形式创建的对象为函数对象:

    function fun1(){}    var fun2 = function(){}    var fun3 = new Function();    console.log(typeof fun1);//function    console.log(typeof fun2);//function    console.log(typeof fun3);//function

  ②其余创建的对象都为普通对象;

  ③Object , Function , Array , Map , Date ......等js中的内置对象都是通过new Function()创造的 , 所以:

    console.log(typeof Function);//function    console.log(typeof Object);//function    console.log(typeof Array);//function    console.log(typeof Map);//function

  ④在js中 ,每当定义一个对象 , 都会包含一些预定的属性 , 其中函数对象就有一个属性叫prototype

  ⑤普通对象没有prototype属性 ,  但是有__proto__属性

  ⑥prototype(原型对象)就是普通对象 , 除了Function.prototype(function)

    log(typeof obj1.__proto__);//object     console.log(typeof fun1.prototype);//object    console.log(typeof fun1.prototype.__proto__);//object    console.log(typeof Object.prototype);//object    console.log(typeof Function.prototype);//function

一.什么是__proto__(原型):

  每个对象都有__proto__属性 , __proto__指向创建他的构造函数的原型对象(实例指向原型对象的指针).

二.什么是prototype(原型对象):

  每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型对象上继承属性和方法。原型是一个对象,其他对象可以通过它实现继承。

  作用:主要用来继承,实现继承靠的是原型链

     如果构造函数和构造函数的原型对象都有同一个方法 , 那么对优先继承构造函数的 , 在js底层 , 一般都是给父构造函数的原型对象添加方法 .

     var Student = function(){            this.name = 'lily';        }        Student.prototype.name = function(){            return "mike";        }        var stu = new Student();        console.log(stu.name); //'lily'     
     //__proto__属性是实例指向原型对象的指针 , 以下是原型链表示代码      console.log(stu.__proto__ === Student.prototype);//true        console.log(Student.prototype.__proto__ === Object.prototype);//true        console.log(Object.prototype.__proto__ === null);//true     

      console.log(Student.__proto__ === Function.prototype);

      console.log(Object.__proto__ === Function.prototype);
      console.log(Function.__proto__ === Function.prototype);
      console.log(Function.prototype.__proto__ === Object.prototype);
      console.log(Object.prototype.__proto__ === null);

三.原型链:

  原型链总结:

  1.继承的实现并不是靠prototype,而是靠__proto__

  2.原型链的作用,在于读取对象的某个属性时,js引擎会优先查找对象本身的属性,如果没有,会去该对象的构造函数的原型对象(prototype)上面找,一直找到最顶层的原型对象,Object.prototype , 如果还没有则返回undefine
  3.这个过程中,维持上下层关系靠的是__proto__

 

 

 

转载于:https://www.cnblogs.com/nlj-blog/p/7544568.html

你可能感兴趣的文章
设计模式1:简单工厂模式学习
查看>>
find 命令的参数详解
查看>>
mysql 主从复制
查看>>
06 django视图层
查看>>
《我的第一本C++书》——看图学C++(2)
查看>>
Spring(七)持久层
查看>>
开始记录学习java的笔记
查看>>
高质量c/c++里的strcpy()
查看>>
leetcode13 - Roman to Integer & Integer to Roman - easy & medium
查看>>
JS:公历、农历互转
查看>>
TensorFlow
查看>>
堆与栈
查看>>
phpcms V9 MVC模式 与 URL访问解析
查看>>
基于visual Studio2013解决C语言竞赛题之1013字符串查找
查看>>
js中==和===的区别
查看>>
让管理靠边站!—摘自《华尔街日报》
查看>>
用机器代码书写规则-信息化基础
查看>>
Tomcat+ApacheSOAP部署访问COM对象的WebService
查看>>
软件工程第三次作业
查看>>
Result Maps collection already contains value for com.xxx.x.dao.xxxMapper.Bas
查看>>