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?

this JavaScript prototype

Celica 10 years ago

你没new啊

大宝SOD蜜 answered 10 years ago

构造函数里定义的this指向他的实例

绯雪十六夜 answered 10 years ago

首先明确一点,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

Your Answer