• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

黄文超

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

JavaScript的原型链

JavaScript中的原型

1、显式原型

function Fn(){
    
}
Fn.prototype.test=function(){}
/*
	1、这个prototype就是显式原型
	2、函数方法(对象)可以直接操作显式原型,给其原型对象添加属性或者方法
*/

2、隐式原型

function Fn(){
    
}
var fn = new Fn()
console.log(fn.__proto__)
/*
	1、这个__proto__就是隐式原型
	2、在ES6之前,隐式原型不能给原型对象添加属性或者方法
	3、如果实例化对象在使用方法时,找不到对应方法和属性,则会直接去原型对象上找
	4、如果始终没找到,则为undefined
*/

3、原型链

详细解释请看下方
简单的总结:
	1、所有函数方法都是Function的实例对象,因此函数方法的__proto__都是Function
	2、所有实例对象里面都要内部的__proto__都要创建一个空的Object对象,因此实例对象的__proto__都指向Object的实例对象
	3、Object实例对象和的__proto__指向的是null,表示原型链的尽头

我们都知道__proto__都是指向父亲的原型对象的,而prototype则是函数和方法中特有的对象,它也指向自身的实例对象,根据这个我们就可以读懂上面那个图:
	1、Foo是Foo()的原型对象,因此Foo的prototype指向Foo实原型
	2、Foo原型对象中又创建一个空的Object对象,因此__proto__指向Object原型对象,
	3、Foo()是一个函数,因此肯定是函数的实例化对象,因此Foo()的__proto__是Function
	4、然后js有一个特殊的操作,就是var Function = new Function(),因此Function的prototype的prototype和Function()的__proto__指向相同
	5、Object()是一个函数,因此他的__proto__是Function
	6、Function中创建了一个空的Object对象,因此Function的__proto__指向Object原型对象

posted on 2021-10-22 09:35  黄文超  阅读(70)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3