2015-10-05 139 views
0

我想擴展一個對象並向它添加一些自定義實例方法。如何訪問屬性中的數據?訪問實例方法內的實例屬性

const Media = Parse.Object.extend('Media', { 
    getUrl: function getUrl() { 
    // HOW DO I ACCESS ATTRIBUTES HERE? 
    }, 
}); 

const url = new Media({ 
    url: 'url here', 
}).getUrl() 

我基本上希望屬性值活多久這個或this.get(「網址」)

那麼,如何獲得實例方法的內部訪問屬性?

感謝

+0

你看到'返回this.url'在你的getURL()定義的任何問題? – Arkantos

+0

是的,它是未定義的。 **這個**是一個空的對象。 –

回答

0

原來,我試圖嵌套對象上執行getUrl()方法創建一個實例,但是我沒有」在查詢中包含這個對象。

1

與您的代碼的問題是,你要使用一個構造函數不初始化您的實例。

const url = new Media({ 
    url: 'url here', 
}); 

在這裏,我們傳遞一個state objecturl財產Media構造函數,但你實際上並沒有捕捉對象初始化實例,因此該對象被簡單地忽略。因此,您的實例上沒有名稱url的屬性,this.url將爲undefined

如文件here,Parse.Object.extend()將返回給定類名稱的Parse.Object的子類。 extend()的第二個參數是一個包含所有實例可用的實例屬性/方法的對象。一旦定義了類,就可以使用new關鍵字創建一個新實例。如果在創建實例時有幾個參數要初始化,可以使用下面的initialize方法。

const Media = Parse.Object.extend('Media', { 
    initialize : function(state){ 
    this.url = state.url; 
    this.type = state.type; 
    }, 
    getUrl: function getUrl() { 
    return this.url; 
    }, 
    getType : function(){ 
    return this.type; 
    } 
}); 

然後,通過調用構造新的關鍵字和傳遞狀態的物體,像下面

const url = new Media({ 
    'url' : 'myURL', 
    'type' : 'video' 
}); 

url.getType(); // returns 'video' 
url.getUrl(); // returns 'myURL' 
+0

這實際上是有道理的,雖然這種行爲不是很直觀。順便說一句,似乎Parse爲對象生成某種緩存。我從模型中刪除了方法,但它仍然可用。 –

+0

'我從模型中刪除了方法,但它仍然可用。我不明白這一部分。謹慎地闡述:) – Arkantos

+0

對不起,解釋不清:)因此,我從實例方法中移除了方法** getUrl()**,但它仍然可以調用。 –