函数有一个特殊的属性 prototype!
2024-09-08 04:22:48
JavaScript 中只有对象,没有类。
实际上,JavaScript 才是真正应该被称为「面向对象」的语言,因为它是少有的可以不通过类,直接创建对象的语言。
函数的 prototype 属性
在 JavaScript 中,之所以会有「类」的错觉,是因为函数默认都会有一个名为 prototype
的公有并且不可枚举的属性,这个属性会指向另一个对象:
function Foo() {}
Foo.prototype; // {}
Foo.prototype
所指向的对象通常被称为 Foo 的原型。
我们来看下代码:
function Foo() {}
var a = new Foo();
Object.getPrototypeOf(a) === Foo.prototype; // true
调用 new Foo()
时会创建一个新对象 a
,其中的一步就是将新对象 a
内部的 [[Prototype]] 链接(关联)到 Foo.prototype
所指向的对象。
Object.create(..) 方法
生成一个关联到其它对象的新对象,可以使用 Object.create(..)
方法。看下面的例子:
var anotherObj = {
a: 2
};
// 创建一个关联到 anotherObj 的对象
var myObj = Object.create(anotherObj);
myObj.a; // 2
现在 myObj
对象的 [[Prototype]] 关联到了 anotherObj
。显然 myObj.a
并不存在,仅是尽管如此,属性访问仍然成功地(在 anotherObj
中)找到值 2。
如果在 anotherObj
也找不到 a
并且 anotherObj
[[Prototype]] 链不为空的话,就会继续查找下去……这个过程会持续到找到匹配的属性名为止,要不然一直查找到 [[Prototype]] 链顶端的 Object.prototype
对象,还找不到就返回 undefined
了。
最新文章
- HubbleDotNet 的注册码生成器
- Runtime消息传送
- 微信公众号内H5调用微信支付国内服务商模式
- Pictures of Ascii Art
- 004--VS C++ 绘制封闭图形
- Sql中判断“数据库"、"表"、"临时表"、"存储过程"和列”是否存在
- web框架之Spring-MVC环境搭建
- [转] Putty - 文件夹显示的蓝色太暗
- 【Java】对服务器程序的理解
- hasClass方法 动画方法说明
- hdoj 1269 迷宫城堡(强连通分量)
- JavaScript面向对象编程(9)高速构建继承关系之整合原型链
- Python 项目实践一(外星人入侵小游戏)第三篇
- linux下的打包与压缩
- Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
- es crul查询(一)
- [原创] 详解云计算网络底层技术——虚拟网络设备 tap/tun 原理解析
- webstorm的快捷键总结
- 【java多线程】队列系统之DelayQueue源码
- 【强化学习】python 实现 saras 例一
热门文章
- envoy  功能介绍
- 企业建站系统MiinCMP1.0.5 版公布!
- 利用 Excel 写 C51 的宏定义
- (转)Download interrupted: Connection to https://dl-ssl.google.com refused
- 运行maven打出来的jar包报错:Unable to locate Spring NamespaceHandler for XML schema namespace
- CRC码计算
- linux启动自动挂载分区和/etc/fstab简单修复
- (转)winform pictureBox后台显示图片
- oracle数据库查询题目!!!!!我的最爱
- keytool生成JKS证书的详细步骤及截图