基于js中的原型(全面讲解)

发布时间 - 2026-01-11 03:18:27    点击率:

在讲js的原型之前,必须先了解下Object和Function。

Object和Function都作为JS的自带函数,Object继承自己,Funtion继承自己,Object和Function互相是继承对方,也就是说Object和Function都既是函数也是对象。

console.log(Function instanceof Object); // true
console.log(Object instanceof Function); // true

Object 是 Function的实例,而Function是它自己的实例。

console.log(Function.prototype); // ƒ () { [native code] }
console.log(Object.prototype);  // Object

普通对象和函数对象

JavaScript中万物皆对象,但对象之间也是有区别的。分为函数对象和普通对象。

函数对象可以创建普通对象,普通对象没法创建函数对象,普通对象JS世界中最低级的小喽啰,啥特权也没有。

凡是通过new Function创建的对象都是函数对象,其他都是普通对象(通常通过Object创建),可以通过typeof来判断。

function f1(){};
typeof f1 //"function"


var o1 = new f1();
typeof o1 //"object"

var o2 = {};
typeof o2 //"object"

这边要注意的是下面这两种写法是一样的

function f1(){};  ==  var f1 = new Function();
function f2(a,b){
  alert(a+b);
}

等价于

var f2 = new Function(a,b,"alert(a+b)");

prototype、_proto_和construetor(构造函数)

下面两句话也很重要

1、每一个函数对象都有一个prototype属性,但是普通对象是没有的;

  prototype下面又有个construetor,指向这个函数。

2、每个对象都有一个名为_proto_的内部属性,指向它所对应的构造函数的原型对象,原型链基于_proto_;

好了,开始上代码和例子,建一个普通对象,我们可以看到

  1、o的确没有prototype属性

  2、o是Object的实例

  3、o的__proto__指向Object的prototype

  4、Object.prototype.constructor指向Object本身

  还可以继续往下延伸......

var o = {};
  console.log(o.prototype); //undefined
  console.log(o instanceof Object); //true
  console.log(o.__proto__ === Object.prototype) //true
  console.log(Object === Object.prototype.constructor) //true 
  console.log(Object.prototype.constructor) //function Object()
  console.log(Object.prototype.__proto__); //null

下面来一个函数对象,从下面的例子可以看出

1、demo是函数对象,f1还是普通对象

2、f1是Demo的实例

3、demo的原型prototype的__proto__指向Object的原型prototype,而Object的原型prototyped的__proto__指向null;

function Demo(){};
  var f1 = new Demo();
  console.log(f1.prototype); //undefined
  console.log(f1 instanceof Demo); //true
  console.log(f1.__proto__ === Demo.prototype); //true
  console.log(Demo === Demo.prototype.constructor) ;//true
  console.log(Demo.prototype.__proto__ === Object.prototype) ;//true
  console.log(Object.prototype.__proto__); //null

原型链

javascript中,每个对象都会在内部生成一个proto 属性,当我们访问一个对象属性时,如果这个对象不存在就回去proto 指向的对象里面找,一层一层找下去,这就是javascript原型链的概念。

f1.__proto__ ==> Demo.prototype ==> Demo.prototype.__proto__ ==> Object.prototype ==> Object.prototype.__proto__ ==> null

JS中所有的东西都是对象,所有的东西都由Object衍生而来, 即所有东西原型链的终点指向null

以上这篇基于js中的原型(全面讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# js原型  # JS原型与原型链的深入理解  # js 原型对象和原型链理解  # 都是  # 都有  # 给大家  # 自己的  # 的是  # 好了  # 还可以  # 是有  # 这就是  # 而来  # 又有  # 可以通过  # 要注意  # 希望能  # 不存在  # 可以看到  # 可以看出  # 当我们  # 这篇  # 自带 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在 React 中条件性地遍历数组并渲染元素  如何在Windows虚拟主机上快速搭建网站?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  Laravel如何发送系统通知?(Notification渠道示例)  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  如何在宝塔面板中创建新站点?  Laravel如何使用模型观察者?(Observer代码示例)  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel如何使用Eloquent进行子查询  大同网页,大同瑞慈医院官网?  JS去除重复并统计数量的实现方法  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  原生JS实现图片轮播切换效果  魔方云NAT建站如何实现端口转发?  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  如何快速搭建高效WAP手机网站吸引移动用户?  如何在自有机房高效搭建专业网站?  晋江文学城电脑版官网 晋江文学城网页版直接进入  Laravel如何使用Vite进行前端资源打包?(配置示例)  黑客如何利用漏洞与弱口令入侵网站服务器?  Swift中switch语句区间和元组模式匹配  利用 Google AI 进行 YouTube 视频 SEO 描述优化  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  网站图片在线制作软件,怎么在图片上做链接?  bing浏览器学术搜索入口_bing学术文献检索地址  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  linux top下的 minerd 木马清除方法  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  WordPress 子目录安装中正确处理脚本路径的完整指南  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  *服务器网站为何频现安全漏洞?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  EditPlus中的正则表达式实战(6)  如何在腾讯云服务器上快速搭建个人网站?  网站制作企业,网站的banner和导航栏是指什么?  如何在橙子建站上传落地页?操作指南详解  PHP正则匹配日期和时间(时间戳转换)的实例代码  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】