![](/img/trans.png)
[英]Creating a JavaScript function to change a previously declared variable
[英]Can a function be declared as a variable in JavaScript?
考慮以下JavaScript對象定義:
var person = {
firstName: "John",
lastName : "Doe",
id : 5566,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
我知道,如果我們要使用對象屬性(即函數),我們必須編寫以下代碼:
person.fullName();
據我所知,JavaScript對象是名為屬性或方法的命名值的容器。
另外,我知道我可以將對象屬性(如firstName,lastName,id)定義為單個變量。 現在,我的問題是我也可以將函數“ fullName”定義為變量嗎? 如果有可能,那怎么辦? 如果沒有,那為什么呢?
謝謝。
有可能的。 請注意,您的代碼與此代碼等效:
var person = {};
person.firstName = "John";
person.lastName = "Doe";
person.id = 5566;
person.fullName = function() {
return this.firstName + " " + this.lastName;
}
要注意的重要一點是function() { return this.firstName + " " + this.lastName; }
function() { return this.firstName + " " + this.lastName; }
(或更確切地說,該代碼字符串的求值結果)是一個值 ,就像5566
一樣,並且可以包含在屬性,變量或數組中,就像5566
一樣。 唯一的區別是,一個是數字,另一個是函數。
除了存儲在屬性(“方法”)中的函數的原始示例之外,以下是將函數值存儲在變量中的示例:
var sayHello = function(name) { console.log("Hello, " + name); }
它在數組中:
var adders = [
function(x) { return a; },
function(x) { return (a + 1) % 3; }
function(x) { return (a + 2) % 3; }
];
在這里,它作為參數傳遞:
function twice(f, x) {
return f(f(x));
}
twice(function(x) { return x * 2; }, 7);
// 28
是
這是帶有問題示例的簡單答案
jQuery(document).ready(function() {
window.$ = jQuery;
initializeGlobelCalls.init();
});
var initializeGlobelCalls = function () {
var validatefunction = function() {
$(document).on('click','#divid',function(){//event trigger when you want to call function
//your function code
});
};
return {
init: function () {
validatefuction();//can add multiple functions here
}
};
}();
使用這種結構,您可以編寫多個函數,首先需要定義諸如validatefunction
函數,然后將其添加到init中。
在JavaScript中,變量也可以指向函數。
例:
var fullName = function(param) {
return param;
}
console. log(fullName('some text'));
除非您在創建對象時生成fullName
,如下所示,否則是不可能的:
var person = {
firstName: "John",
lastName : "Doe",
id : 5566,
fullName : ''
};
person.fullName = person.firstName + person.lastName;
否則,將無法創建僅由該函數在調用時將由該函數創建的靜態變量(例如,在您的原始示例中)。 這是不可能的,因為按照JavaScript的設計方式,您不能以只能生成靜態屬性的方式靜態分配動態屬性(除了下面引用的ES6 getter,它仍將在每次調用時生成值)一次自動執行,而無需您的部分或庫中的某種算法來為您執行此操作。
如上文所述,您可以嘗試使用ES6 getter,但這只會使其看起來像一個屬性, 每次訪問它仍會被調用:
例:
var person = {
firstName: "John",
lastName : "Doe",
id : 5566,
get fullName() { return this.firstName + ' ' + this.lastName; }
};
然后,您將像這樣訪問它: person.fullName
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.