0

考虑以下 JavaScript 对象定义:

var person = {
    firstName: "John",
    lastName : "Doe",
    id       : 5566,
    fullName : function() {
       return this.firstName + " " + this.lastName;
    }
};

我知道如果我们想使用对象属性(即函数),我们必须编写以下代码:

person.fullName();

据我所知,JavaScript 对象是称为属性或方法的命名值的容器。

此外,我知道我可以将对象属性(如firstName、lastName、id)定义为单独的变量。现在,我的问题是我也可以将函数“fullName”定义为变量吗?如果有可能那怎么办?如果不是,那为什么?

谢谢你。

4

4 回答 4

0

有可能的。请注意,您的代码等效于以下代码:

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; }(或者更确切地说,该代码字符串的评估结果)是一个value,就像5566is 一样,并且可以包含在一个属性、一个变量或一个数组中......就像5566can . 唯一的区别是,一个是数字,另一个是函数。

除了存储在属性(“方法”)中的函数的原始示例之外,以下是存储在变量中的函数值的示例:

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
于 2017-05-22T04:02:20.700 回答
0

是的

这是您问题的示例的简单答案

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
        }
       };
 }();

使用这种结构你可以编写多个函数,首先需要定义函数likevalidatefunction然后添加到init

于 2017-05-22T04:31:10.260 回答
0

在 JavaScript 中,变量也可以指向函数。

例子:

var fullName = function(param) {
  return param;
}

console. log(fullName('some text')); 
于 2017-05-22T04:33:09.557 回答
0

除非您在创建对象时生成,否则这是不可能的,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

于 2017-05-22T04:37:07.233 回答