Js中关于this和传参的一些疑问
<script type="text/javascript">
function t1(){
};
t1.prototype.attr = 'red';
function t2(){
this.attr = 'orange';
console.log(t2.attr);//undefined
};
t2.prototype = new t1();
function t3(){
};
t3.prototype = new t2();
console.log(t2.attr,t2.prototype.attr);//undefined "red"
console.log(t3.attr,t3.prototype.attr);//undefined "orange"
</script>
我有几个疑问,希望能得到指点:
1,第一个undefined,this难道指的不是t2本身吗?
2,为什么t3.prototype.attr会是orange?
Celica
10 years ago
Answers
首先明确一点,t1,t2,t3都只是函数,不是一个对象实例,没有attr属性。
t3的原型指向了t2的实例,所以t3.prototype.attr就是“orange”
其实构造函数和普通的函数没有任何区别,只是调用方式不一样而已。构造函数使用new调用,调用时,会执行下面几个步骤: (参考《js高级程序设计》p145)
1. 创建一个新对象
2. 将构造函数的作用域指向这个对象(即this值)
3. 执行构造函数
4. 返回这个新对象
所以这个新对象上就是天t3.prototype, 在构造函数里设置了实例属性attr,其值就是“orange”.
ccfliu
answered 10 years ago