2016-03-04 119 views
0

我有3個碼:調用內部函數以JavaScript

代碼1:

var object = { 
    someMethod: function(a) { console.log("hello") } 
}; 

代碼2:

var object = { 
    someMethod: function(a) { calling() } 
}; 
function calling(){console.log("i am calling me");} 

代碼3:

var wrapper = function(){ 
    add: function(key, value){ localStorage.setItem(key, value) } 
}; 

只有代碼3似乎失敗:未捕獲的SyntaxError:意外肯((...)VM296:3是它在Chrome中給出的錯誤。有人可以解釋它有什麼問題嗎?

我的想法是在其中創建一個函數'wrapper'和'add','delete'和'update'方法,以便像下面這樣訪問它們:wrapper.add(param1,param2);

回答

0

在你的第一個例子,你有一個對象命名爲object,它有一個方法someMethod它打印到控制檯。

在第二個示例中,您有一個包含方法和全局函數的對象。對象的方法調用全局函數。

在第三個示例中,您有一個函數,並且您正試圖向該函數添加一個方法。這不起作用。您可以將方法添加到對象。它應該是這樣的:

var wrapper = { 
    add: function (key, value) { 
     localStorage.setItem(key, value); 
    } 
}; 

並使用wrapper.add(key, value)訪問它。


另外,在盧卡的回答中,他給出的第一個例子不是對象而是對象構造函數。如果您使用以下代碼

var wrapper = function(){ 
    this.add = function(key, value){ localStorage.setItem(key, value) } 
}; 

您無法使用wrapper.add(key, value)訪問它。首先,您需要使用構造函數new wrapper()創建對象,然後訪問該方法。

var myObject = new wrapper(); 
myObject.add(key, value); 

// or 

new wrapper().add(key, value); 

我認爲這不是你要找的。

1

應該

var wrapper = function(){ 
    this.add = function(key, value){ localStorage.setItem(key, value) } 
}; 

這是一個不同的語法,如果你正在使用對象符號與{}function(){}

他們基本上達到同樣的目的,你的情況,但語法是不同的。 你當然也可以像其他兩個一樣寫。

var wrapper = { 
    add: function(key, value){ localStorage.setItem(key, value) } 
};