2012-12-23 97 views
2

我有此脚本:如何解决在JavaScript中未定义的属性?

var Tord = (function() { 

    Tord.prototype.getHeader = function() { 
     alert('test'); 
    }; 

    return Tord; 
})(); 

$(document).ready(function() { 

    var tod = new Tord(); 
    tod.getHeader(); 
}); 

我得到一个错误Uncaught TypeError: Cannot read property 'prototype' of undefined线3

我不明白为什么?

,这里是我的js文件的加载方式:

<link rel="stylesheet" href="public/jquery.mobile/jquery.mobile-1.2.0.min.css" /> 
    <link rel="stylesheet" href="public/style.css" /> 
    <script src="public/jquery-1.8.3.min.js"></script> 
    <script src="public/jquery.mobile/jquery.mobile-1.2.0.min.js"></script> 
    <script type="text/javascript" charset="utf-8" src="public/cordova-2.2.0.js"></script> 
    <script type="text/javascript" charset="utf-8" src="public/script.js"></script> 

script.js有脚本从上面。

有什么想法?谢谢。

+0

Tord不应该自行调用。 – Christoph

回答

8

因为你已经显示的代码。你看,调用此线时...

Tord.prototype.getHeader = function() { 

...托德不确定。但是当你设置Tord时应该是一个函数(因为prototype应该是构造函数的一个属性,可以用于任何用途) - 并且你根本没有努力使Tord成为一个函数。

我想你想要做可以与实现这一目标是什么:

var Tord = (function() { 
    var Tord = function() {}; // to properly name the constructor 
    Tord.prototype.getHeader = function() { 
     alert('test'); 
    }; 
    return Tord; 
})(); 

有了这个,你可以定义一些外部逻辑不同的构造函数(但仍定义它们一次)。但在您的代码目前的状态,没有必要使它那么复杂:这...

var Tord = function() {}; 
Tord.prototype.getHeader = function() { ... }; 

...应该足够,在我看来。

+0

我以为这是一个很好用的JavaScript模式,以便使用'var tod = new Tord();' – Patrioticcow

+0

现在明白了。我需要一个构造函数来定义Tord :)谢谢 – Patrioticcow

+0

最简单的解决方案是将匿名IIFE变成函数声明。其余的可以保持原样。 – Christoph

相关问题