Javascript Prototype需要.prototype。为什么?

时间:2013-05-15 20:21:24

标签: javascript jquery prototype

我有一些代码作为我正在处理的javascript周末项目的一部分。我的问题在最后一行。据我所知,我应该只能致电Floater.create(),而不必致电Floater.prototype.create()。为什么我需要额外的.prototype?没有它,就会抛出错误:Floater() has no method "create"

function Floater(){}

Floater.prototype.create = function(){
    //do stuff
}

$(document).ready(function(){
    //do stuff
    runStartup();
});

function runStartup(){
    loginFloater = new Floater;
    Floater.prototype.create();
    // as far as I know, this should run as just Floater.create(),
    // but that throws an error.
}

1 个答案:

答案 0 :(得分:5)

这部分:

Floater.prototype.create = function(){
    //do stuff
}

不会向Floater构造函数添加属性,而是向使用new Floater()创建的实例的[[Prototype]]对象添加属性。因此,Floater实例将具有该方法,但构造函数不会。

您可能希望将启动功能更改为:

function runStartup(){
    loginFloater = new Floater();
    loginFloater.create();
}

但是,考虑到您的方法的名称,您可能还想完全删除create,并直接从构造函数执行初始化操作:

function Floater(){
    // init stuff here
}