Discuss
/
JavaScript
/
关于proto和__proto__的区别
关于proto和__proto__的区别
Topic sourcea.proto === Student.prototype; //true
b.proto === Student.prototype; //true
这两行代码为 true
,是因为 ===
俩边都是 undefined
,对象没有 prototype
属性 和 proto
属性,你说的 proto
应该是指 __proto__
这一内部属性。
1 ---------
1 a: {name: 'student', age: 3, run: ƒ}
2 a.__proto__: {constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
3 a.constructor: ƒ Object()
2 ---------
1 b: {}
2 b.__proto__: {name: 'student', age: 3, run: ƒ}
3 b.constructor: ƒ Object()
- 1
水蔓姐姐
感觉有点绕,敲了一下有一点小小的发现。
上面的a是用new Object生成,感觉就是Student本身(或者类似指针?)。因为把在console改变a的属性也会把Student和属性改了。
也因为a就是Students对象,而b对象是从Studnents对象“继承”过来的。也因此,
a.__proto__
和b.__proto__
完全不同。而实际上Studnent(也就是a).proto和b.proto都是从Students.prototype构建的,所以这是一样的。但是从Object生成Student时和从Student生成b不一样,因为
不知道是不是这么理解:
Student.prototype 可以生成xiaoming之类的对象(类似继承)
xiaoming.__proto__
是原型(Student.prototype)的对象Studentxiaoming.proto
是原型本身Student.prototypenew Object(Student)生成的对象是Student本身(或者类似指针的东西?),
prototype
是Student.prototype,__proto__
是Object.prototypeprototype
是Student.prototype,但__proto__
是Student对象