__proto__和prototype的区别,刚看到一句解释是这样的:
__proto__是站在对象的角度讨论原型对象。
prototype是站在构造函数的角度讨论原型属性,或构造函数创建的对象的原型对象。
仍然不是很理解,请大神帮展开来再说一下。所谓展开大概就是像知乎那样啰嗦的讲一下“我是谁,我从哪里来,我要到哪里去”3个问题。
或者换个说法,就是讲一个东西的时候,一般从3个维度来讲,
1、这个东西是什么?
2、这个东西有什么用?
3、这个东西怎么用?
如果不讲清楚这3个问题,就理解不了,因为我比较傻。谢谢。
另外有个具体的问题是:
最后一句“构造函数创建的对象的原型对象”,意思是当new一个对象的时候,这个new出来的对象是由构造函数创建的?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
其实没有那么复杂,你只是被一些概念性的东西弄迷糊了。
所谓的构造函数就只是一个普普通通的函数,只是它实现的功能就是为了new 一个object
例如:
_proto_在es5里指向构造函数的prototype,在es6里指向该构造函数。看它的__就知道他是个私有属性了,不建议使用。
比如`复制代码
function A(){
}
A.prototype={
}
var a=new A;
console.log(a.aa);//2
a.__proto__={
}
delete a.aa;//删除特权属性
console.log(a.aa);//3`
在不操作a.__proto__的时候,a.aa会是2。
prototype就是原型了。主要用于继承,比如你在Function.prototype定义一个函数,所有函数都有这个方法。
这有一篇js继承相关的文章:闲聊js继承
函数对象都会有个prototype属性,这个其实就是函数对象的一个实例。而每一个对象(如testStr)的__proto__属性均指向这个prototype。就像上面的例子,给String扩展了一个test方法。