javascript基于原型的继承机制

来源:互联网 发布:resnet网络结构全貌 编辑:程序博客网 时间:2024/04/30 03:17

</pre>请区分两个对象:function对象及原型对象;以Object为例<p></p><p><img src="http://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())














 

0 0
原创粉丝点击