2012-12-23 51 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

相關問題