Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

prototype与this的关系

  即使是在实例化一个构造器的过程中,this就已经被创建了。它是一个“干净”的对象,自身并不附带任何属性,唯有[[Prototype]]内置属性被指向了构造器的原型对象。所以我们可以在实例化函数的过程中,从this上直接访问到原型上的属性。
  在JavaScript中,每个对象都有自己的存储空间。访问一个对象的属性时,如果对象自身不存在那个属性就会到其原型链中寻找。
<script>
function f(){
  alert(this.hasOwnProperty("name")); //false
  alert(this.name); //次碳酸钴
};
f.prototype.name="次碳酸钴";
new f;
</script>
  但是,我们一旦往this上赋值,即使那个值是它自身,那么这个新的值就会被直接赋到this上而不是原型上。 <script>
function f(){
  this.name=this.name;
  alert(this.hasOwnProperty("name")); //true
};
f.prototype.name="次碳酸钴";
new f;
</script>
  只有一种情况往this上赋值不会被作为this的自身属性,那就是原型中的对应属性不是数据属性,而是访问器属性。 <script>
function f(){
  alert(this.name); //次碳酸钴
  this.name="重新赋值"; //无影响
  alert(this.name); //次碳酸钴
};
f.prototype.__defineGetter__("name",function(){
  return "次碳酸钴";
});
new f;
</script>
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^