老师同学们来看看我的理解!!!
所有的引用类型都有一个__proto__属性且值为一个对象。这一点我感觉和对象的创建有关!!!且听我细细说来!
let arr=[]等于new Array() let obj={}等于new Object() obj=new Fun()他们本质都相同都是通过一个函数创建一个对象实例。
而函数(前面我们已经知道Array,Object,Function等都是JS内置函数)都有一个显示原型prototype也就是原型对象(老师在第三点钟说过!)。我们创建实例的过程是这样的:2-1:以函数的原型对象prototype为原型创建一个对象(这点很重要!!)2-2:把函数的this赋值给这个对象,然后运行函数。2-3:若函数有返回值,且返回值为引用类型则返回这个引用值(不会返回我们创建的这个对象!!)否则返回this(用prototype为原型创建的这个对象)。
所以有了以下结果:当我们 let a=[] 时 a 实际上是 Array.prototype为原型创建的 a的__proto__===Array.prototype!!。与老师在第四点中说过:“所有引用类型的__proto__属性都指向他的构造函数的prototype属性”不谋而合
4.举个栗子:
function Fun(name){
this.name=name;
}
Fun.prototype.age=18;
let foo=new Fun('zhangsan');
console.log(Fun.prototype) //{age:18,constructor:f}
console.log(foo.__proto__===Fun.prototype) //true
console.log(foo.age) //18
4-1由第一次打印可以知道函数的prototype确实是一个对象。内含constructor属性是一个函数这个函数就是Fun本身!这个对象也含有__protot__属性指向Object.prototype原理可以由上面几点得知!
4-2由第二次打印可以知道__proto__也是一个对象,并且确实指向他的构造函数的prototype属性。
4-3印证了老师的第五点:获取属于在对象中不存在时,会去他的__proto__属性中查找。而__proto__属性也就是构造函数的prototype属性。所有也就是去prototype中查找。
5.有点问题还不太清除我们说的原型是否就是:prototype.原型链就是__proto__?
正在回答 回答被采纳积分+1
我觉得同学是想表达Object.create(构造函数的prototype),创建出来的空对象。 感觉跟老师说的是同一个意思。
同学你好,js面向对象是在第二阶段学习的,时间有点久,同学可能记错了,在前面的课程中老师有详细的讲解使用new关键字实例化对象的过程,同学可以回顾下,加深记忆和理解
https://class.imooc.com/lesson/502#mid=11844
祝学习愉快~
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星