javascript - Js中关于this和传参的一些疑问
阿神
阿神 2017-04-10 15:34:56
[JavaScript讨论组]
<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?

阿神
阿神

闭关修行中......

全部回复(3)
阿神

首先明确一点,t1,t2,t3都只是函数,不是一个对象实例,没有attr属性。
t3的原型指向了t2的实例,所以t3.prototype.attr就是“orange”

其实构造函数和普通的函数没有任何区别,只是调用方式不一样而已。构造函数使用new调用,调用时,会执行下面几个步骤: (参考《js高级程序设计》p145)
1. 创建一个新对象
2. 将构造函数的作用域指向这个对象(即this值)
3. 执行构造函数
4. 返回这个新对象

所以这个新对象上就是天t3.prototype, 在构造函数里设置了实例属性attr,其值就是“orange”.

PHPz

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

阿神

你没new啊

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号