今天来认识一下函数 高级(原型与原型链,执行上下文与执行上下文栈,作用域与作用域链,闭包)

1 .原型 prototype(函数的属性,是个函数就有,内置属性)

    举个例子,Date作为一个函数,他的内置属性(date.prototype)是一个对象,里面有若干方法,这些方法是给它的实例使用的

   每个函数都有一个prototype属性,它默认指向一个object空对象

   原型对象中有一个属性为:constructor,指向函数对象   !!!按住ctril点系统函数可查看系统函数的原型

   eg:function type() {} 为这个空函数原型动态添加一个属性:

     type.prototype.test2= function()  {}

 

 

 type.prototype.constructor = = = type

 

!!!原型的主要作用:

   首先要清除,给原型对象添加的属性(一般是方法)给该函数的实例对象使用

   alt+shfit+r(rename)修改页面中所有相同的名字

 

 

2.显式原型(理解原型很关键!!!) 全称:显示原型属性

   基本可以认识为上面介绍的原型

   实例一个对象:var test = new type();  test. test2();实例使用动态添加的方法

 3.隐式原型(每一个实例对象都有一个隐式原型__proto__)

    隐式原型的值等于其构造函数的显式原型的值

  function Fn () = {}    var fn = new Fn()     Fn.protptype = = = fn.__proto __(引用属性)

  存放的是相同的地址

  

******************了解内存结构图:谁添加的prototype,__proto__

   在函数创建后添加显式:this.prototype = {} //创建了空的对象  系统完成的,所以才说每个函数都有一个prototype(地址,引用变量属性)空对象  

  对象创建后添加隐式:

  在var fn = new Fn() 中有一步操作:this__proto__=Fn.prototype

  *****************************************画图

 

 

 

 程序员可直接操作显式原型,不能操作隐式原型(在es6之前)

实例首先在本地寻找方法,找不到再去调用原型的方法;

 

 

  

 

  

 

 

  

posted on 2021-08-02 23:04  星星念念$6404  阅读(158)  评论(0编辑  收藏  举报