javascript - 自定义对象中this为什么代表A.fn.A.init {}?
PHP中文网
PHP中文网 2017-04-11 12:05:45
[JavaScript讨论组]

自定义对象A,如下:

A = function() {

}
A.prototype = {
    init: function() {
        console.log(this);
    }
}

当调用new A.prototype.init();的时候控制台打印的结果是A.init {}
A.prototype取别名,如下:

A = function() {

}
A.as = A.prototype = {
    init: function() {
        console.log(this);
    }
}

调用new A.prototype.init();打印的结果变成了A.as.A.init {}
为什么?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(4)
PHP中文网

console.dir(A)显示大致结构:

function A()
    prototype: Object
        init: function()
            prototype: A.as.A.init
        

额,我想说我也没明白为啥会这样,而且打印了两次!

伊谢尔伦

个人觉得console.log这种非标准方法,对其打印出的结果不宜深究,没太大意义。

比如,你说的两种情况我测试的结果都是:init {}

我的浏览器:Chrome 51.0.2704.79 dev-m。

ringa_lee

能说下怎么打印出来的么,我使用chrome、firefox都没有出现你说的情况呢

黄舟

我在JavaScript设计模式(张容铭 著)这本书也遇到了这个问题。

在第二十七章:链模式中,作者解释说:

∵ new A.fn.init()的构造函数可以是A.fn.init()或者A.init();

A.init()的解释是: new 关键字创建   并通过A.prototype原型找到的(加粗的我没理解,这里指的new是哪来的?)。

∴ A.fn.init=A.init-->A.fn.init=A.fn.A.init


ps:我自己没看懂,请看懂的大神帮忙分析下。还有就是chrome控制台输出的A.fn.A.init{},这里的 A.fn.A.init是对象的一个 标识/别名 ?

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

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