如下一个原型对象:
function Box(){}
Box.prototype.name = 'Programmer';
Box.prototype.method = function(){
return this.name;
};
var box = new Box();
1、box对象的原型属性__proto__访问的是原型对象prototype还是原型对象的constructor属性?
2、通过box.method()可以访问原型对象的method方法,通过box.__proto__.method()也可以访问,这两种方式的区别是什么?访问原型的属性和方法该用哪种方式?
3、构造函数Box的原型对象是Box.prototype吗?
4、原型对象存储在哪里?请细说一下详细的过程
5、实例对象的原型对象的__proto__指向哪里?如果存在这个对象,那么这个对象的__proto__又指向哪里?
6、构造函数Box的__proto__指向哪里?如果存在这个对象,那么这个对象的__proto__又指向哪里?
1、实例化对象box的__proto__访问的是原型对象的prototype,原型对象的constructor属性指向Box()。
2、box.method()方法和box.__proto__.method()都访问method()的方法,区别是,box.method()方法首先会在box的实例属性中访问method方法,如果找不到,再访问Box.prototype。访问原型的属性和方法用box.__proto__,但这个__proto__属性不是ECMAScript标准化的属性,不是所有浏览器都支持。ECMAScript5标准化的方法为Object.getPrototypeOf()。
3、对象Box的原型对象为Box.prototype。
4、这个我不知道。
5、这个是继承中原型链的概念,如果原型对象的__proto__中,即Box.prototype中包含一个(或多个)属性为另一个对象(父对象),而父对象又有原型对象,那么Box原型对象的__proto__属性指向父对象的原型。
6、我认为,JS中,Box的构造函数是通过函数来实现的,根据JS原则,函数的作用域是一个封闭的子作用域,不同实例化对象通过构造函数实例化的属性被隔离成一个个封闭的作用域,不能直接互相访问。而原型是在全局作用域下定义的,所有的实例化对象访问的都是同一份原型属性,所以,我认为构造函数Box没有__proto__属性。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。