![](/img/trans.png)
[英]Passing a variable or property value to a method in a JavaScript object returns “undefined”
[英]Passing variable into object method javascript
試圖讓我了解Java語言中的對象,方法,閉包等。
我看不出為什么這不起作用,這是我認為的一些基本缺陷。 我期望將val變量傳遞給addNote()函數,但事實並非如此。 我認為,在函數外部聲明的任何變量都可以用於該函數,只要它們不在另一個函數中即可。 那不正確嗎?
if(typeof(Storage) !== "undefined") {
console.log(localStorage);
var $input = $('#input'),
$submit = $('#submit'),
$list = $('#list'),
val = $input.val();
var noteApp = {
addNote : function(val) {
var item = val.wrap('<li />');
item.appendTo($list);
clearField();
},
clearField : function() {
$input.val = '';
},
delNote : function(note) {
}
};
$submit.on('click', function(){
noteApp.addNote();
});
} else {
}
我正在嘗試學習專業人士如何使他們的代碼如此簡潔,簡潔和模塊化。 我認為一個筆記應用程序將是一個完美的開始,可恥的是我陷入了第一個障礙...
干杯。
問題中的代碼有幾個問題
val
的參數並且不將參數傳遞給函數 clearField()
時是this.clearField()
val
是一個字符串,沒有wrap
方法 $input.val = '';
無效的jQuery 我會這樣清理
var noteApp = {
init: function() {
if (this.hasStorage) {
this.elements().events();
}
},
elements: function() {
this.input = $('#input');
this.submit = $('#submit');
this.list = $('#list');
return this;
},
events: function() {
var self = this;
this.submit.on('click', function(){
self.addNote();
});
},
hasStorage: (function() {
return typeof(Storage) !== "undefined";
})(),
addNote: function() {
this.list.append('<li>' + this.input.val() + '</li>');
this.clearField();
return this;
},
clearField: function() {
this.input.val('');
},
delNote : function(note) {
}
}
記住要調用init方法
$(function() { noteApp.init(); });
在對addNote()
調用中,您沒有傳遞val
任何參數,因此它將是undefined
:
noteApp.addNote();
// ^^ nothing
傳遞輸入(由於val.wrap
調用,您似乎希望jQuery對象不是字符串值):
noteApp.addNote($input);
在函數中聲明val
時,它的作用域僅限於該函數,並且僅當函數調用為該參數傳遞值時才會填充。 即使您在較高范圍中還有另一個名為val
變量,它們仍然是有區別的。 函數中對val
任何引用都將引用局部val
而不是上限范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.