自定义对象中this为什么代表A.fn.A.init {}?

自定义对象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 {}
为什么?

阅读 3.5k
4 个回答

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

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

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

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

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

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

能说下怎么打印出来的么,我使用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是对象的一个 标识/别名 ?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题