怎样理解构造函数的原型对象prototype
2024-08-31 18:40:05
通过构造函数生成的实例对象中的属性和方法其实是从构造函数中"copy"一份后生成的, 也就是说虽然生成的对象是构造函数的实例, 但里面的属性和方法确实相互独立的, 比如下面的lilei.sayHi 和 hanmeimei.sayHi这两个方法虽然同名, 功能也一样, 但实际上是内存中的两个不同地址里的函数, 因此他们是不全等的.
function Person(name){
this.name = name;
this.sayHi = function(){
console.log("Hi, I'm " + this.name);
};
} var lilei = new Person("Lilei");
var hanmeimei = new Person("Hanmeimei"); lilei.sayHi === hanmeimei.sayHi; // false
而原型对象则实现了实例对象使用构造函数方法/属性的"统一" / "同源"调用. 直白地讲, 如果把上面代码中的sayHi()方法定义在原型对象上, 那lilei.sayHi 和 hanmeimei.sayHi 就是全等的.
function Person(name){
this.name = name;
} Person.prototype.sayHi = function(){
console.log("Hi, I'm " + this.name);
}; var lilei = new Person("Lilei");
var hanmeimei = new Person("Hanmeimei"); lilei.sayHi === hanmeimei.sayHi; // true
打个比方, 母亲生了两个孩子, 孩1和孩2, 他们都有眼睛闭嘴耳朵嘴巴, 但这些并不是母亲的器官, 而是从母亲那里继承过来的, 但母亲有一个玩具, 是奶奶的, 这个玩具是唯一的, 但奶奶可以玩, 母亲也可以玩, 孩1和孩2也可以玩, 这里的玩具就是定义在奶奶这个构造函数的对象原型prototype上的一个属性, 这个属性可以被继承的实例对象所使用. 而非像眼睛鼻子这种需要复制一份.
最新文章
- DAY5 DVWA之SQL注入演练(low)
- [转] java中int,char,string三种类型的相互转换
- 关于html、asp、php模板引擎、aspnet mvc、REST的一点思考
- 最长递增子序列LIS再谈
- JSP 相关试题(二)
- 【转】ASP.NET中服务器控件Table动态生成表格及其属性介绍
- bzoj1305
- Chrome浏览器报错:Origin null is not allowed by Access-Control-Allow-Origin.
- [LeetCode OJ] Gas Station
- Womany女人迷 | 氪加
- UVA - 10131Is Bigger Smarter?(DAG上的DP)
- linux网络设置和虚拟机克隆转移之后Error:No suitable device found:no device found for connection 'System eth0'问题解决
- c++ 中lambda
- 约定Service构建方式
- tomcat8.0部署启动
- 【Android】Android apk默认安装位置设置
- OpenGL ES: 纹理采样 texture sample
- docker OCI runtime
- LSTM生成尼采风格文章
- Server 2008 R2大改造变成梦幻Win7系统
热门文章
- Python 死循环
- [微信小程序]实现一个自定义遮罩层
- EINVRES Request to https://bower.herokuapp.com/packages/ failed with 502
- LoadRunne遇到的一些问题FAQ(持续更新...)
- [Java复习] 分布式PRC - Dubbo
- 自定义基于IFC数据的施工进度数据结构
- React——相关工具概述
- Linux 7 关闭、禁用防火墙服务
- python命令行参数解析OptionParser类用法实例
- pycurl模块