基于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以上版本前端静态资源管理【教程】

