js之重写原型对象
2024-10-04 23:05:59
“实例中的指针仅指向原型,而不是指向构造函数”。
“重写原型对象切断了现有原型与任何之前已经存在的对象实例之间的关系;它们引用的仍然是最初的原型”。——前记
var fun = function(){}
fun.prototype = {
name : 'peter',
age : 25
}
var a = new fun();
var b = new fun();
console.log(a.name, b.name);//peter peter
fun.prototype.name = 'jack';
console.log(a.name, b.name);//jack jack
fun.prototype = {};
fun.prototype.name = 'tom';
console.log(a.name, b.name); //jack jack
console.log('1',b.constructor === fun) //1 false
console.log('2',b instanceof fun) //2 false
b.constructor.prototype.name = 'kitty'; //b.constructor.prototype指向的是fun的prototype
console.log(a.name, b.name); //jack jack //如何修改a和b的name是tom?
a.__proto__.name = 'tom';
console.log(a.name,b.name)
上面的b.constructor指向的是构造函数,但是如果构造函数原型被重写,b.constructor !== fun了,原因是指针指向的其实是原型对象。所以:实例化对象的constructor对象不是任何时候都指向构造函数本身,除非构造函数的原型一直不变,如果构造函数原型重写,全等关系就破灭了。
可以看出,实例在原型修改前后的不同,实例只继承实例化之前的原型,可以修改属性值,但是如果重写,那么实例化对象的指针__proto__指向的还是以前的原型对象,如果想要重写实例的原型,则需要修改实例化对象的__proto__属性值了。
【完】
The normal,they make me feel afraid
The crazy, they make me feel sane
最新文章
- Linux 笔记
- Educational Codeforces Round 15 C. Cellular Network(二分)
- rsync+inotify实现服务器数据同步
- 8051学习笔记——AD
- [swustoj 771] 奶牛农场
- 设置Session的超时时间
- uva11624 - Fire!
- unity中的委托
- 【Django】模型层说明
- 前端开发,走浏览器缓存真的很烦,拒绝浏览器走缓存从meta标签做起!
- 正则表达式工具RegexBuddy
- python2 编码与解码
- python中的变量和算数运算
- IDEA进行远程调试
- css居中问题:水平居中、垂直居中
- 42. oracle通过两张表的一个字段对应,update其中一张表的某个字段
- js异步加载的5种方式
- oracle 嵌套查询
- ImageLoader作用 AAAA
- 《精通Python设计模式》学习结构型之外观模式