0

我有一些代码作为我正在处理的 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.
}
4

1 回答 1

5

这部分:

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

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

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

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

但是,给定方法的名称,您可能还想create完全删除,并直接从构造函数中进行初始化:

function Floater(){
    // init stuff here
}
于 2013-05-15T20:22:57.430 回答