</pre>请区分两个对象:function对象及原型对象;以Object为例<p></p><p><img src="https://img-blog.csdn.net/20141009162511593?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYXphcmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />左侧是Object函数对象,右侧是原型对象,</p><p><strong>每个函数本身就是一个构造函数 每个函数又对应一个原型对象</strong></p><p><strong><span style="font-size:24px;">1 当建立一个变量时</span></strong></p><p><pre code_snippet_id="481244" snippet_file_name="blog_20141009_2_9708504" name="code" class="javascript">var aa = new Object(); //等价于var aa={}
aa.name = 'fjs';
console.log(aa.__proto__ === Object.prototype);
现在内存中开辟一个空间,再将该变量的_proty_属性指向构造函数(Object函数对象)的原型object
2 当定义一个函数时,
在内存中既开辟函数对象的空间,又开辟函数原型对象的空间
function Fjs() {
this.name = "fjs";
}
console.log(Fjs.prototype.constructor === Fjs);
console.log(Fjs.prototype.__proto__ === Object.prototype);<strong> </strong>
原型对象的_proto_默认指向Object的原型对象,因为所有对象都继承Object对象
3验证上面两个结论
<span style="font-size:12px;">function Fjs() {
this.name = "fjs";
}
var fjs = new Fjs();
console.log(fjs.__proto__ == Fjs.prototype); </span><span style="font-size:24px;font-weight: bold;"> </span>
FJS对象是继承Object对象
fjs变量的的建造过程:
(1)内存开辟创建一个新的对象fjs(空的)
(2)将当前构造函数(FJS为构造函数对象)的作用域(scope?)指向刚刚创建的新对象(fjs),也就是将构造函数(FJS)的this指向刚刚创建的对象(fjs),而且要为这个对象的内部__proto__属性赋值,用它指向当前构造函数的prototype属性的值(也就是FJS的原型对象)
(3)执行构造函数中的代码,也就是调用this(this.name=fjs赋值过程),为刚刚创建的对象赋值
(4)返回该对象(var fjs= new FJS())