Javascript 对象';s属性设置为本机函数调用,错误做法?

Javascript 对象';s属性设置为本机函数调用,错误做法?,javascript,Javascript,Javascrip可以让对象的属性引用函数,如示例所示。这是否会被认为是错误的,如“资源密集型”或以任何其他方式对系统造成不便: var someGlobalVar = { someElement: document.getElementById("someElementsID") }; 它是有效的,但我想知道它是否会导致每次对象被引用时都进行此调用,或者仅在初始化时进行,或者何时进行?这样写可以吗 var someGlobalVar = { someElement: docu

Javascrip可以让对象的属性引用函数,如示例所示。这是否会被认为是错误的,如“资源密集型”或以任何其他方式对系统造成不便:

var someGlobalVar = {
    someElement: document.getElementById("someElementsID")
};
它是有效的,但我想知道它是否会导致每次对象被引用时都进行此调用,或者仅在初始化时进行,或者何时进行?这样写可以吗

var someGlobalVar = {
    someElement: document.getElementById("someElementsID")
};
相当于:

var someGlobalVar = {
    someElement:null
};

someGlobalVar.someElement = document.getElementById("someElementsID");
还可以:

var someGlobalVar = {

   someElement:null,

   setSomeElement:function(e) {
      this.someElement = e;
   } 

};

someGlobalVar.setSomeElement(document.getElementById("someElementsID"));
相当于:

var someGlobalVar = {
    someElement:null
};

someGlobalVar.someElement = document.getElementById("someElementsID");
还可以:

var someGlobalVar = {

   someElement:null,

   setSomeElement:function(e) {
      this.someElement = e;
   } 

};

someGlobalVar.setSomeElement(document.getElementById("someElementsID"));
我想知道它是否会导致每次引用对象时都进行此调用

不,没有

或者仅在初始化时

这样写可以吗

var someGlobalVar = {
    someElement: document.getElementById("someElementsID")
};
当然,前提是在创建该对象时元素将存在。(如果没有,则
getElementById
将返回
null

此代码:

var someGlobalVar = {
    someElement: document.getElementById("someElementsID")
};
…是这样处理的,如果它在全局范围内(根据变量的名称,我假设它是):

  • 将代码添加到全局环境时(例如,通过
    脚本
    标记),将创建名为
    someGlobalVar
    的变量;它最初的值为
    未定义

  • 当该代码的逐步执行开始时(在所有
    var
    声明和函数声明都已处理之后),对象初始值设定项的处理方式如下:

  • 对象已创建
  • 属性初始值设定项
    someElement:document.getElementById(“someElementsID”)
    的计算结果如下:
  • 计算
    document.getElementById(“someElementsID”)
    部分,其结果是属性值(元素引用,或
    null
  • 属性是使用名称
    someElement
    和上一步中的属性值在对象上创建的
  • 对象的引用保存到变量
    someGlobalVar
  • 我想知道它是否会导致每次引用对象时都进行此调用

    不,没有

    或者仅在初始化时

    这样写可以吗

    var someGlobalVar = {
        someElement: document.getElementById("someElementsID")
    };
    
    当然,前提是在创建该对象时元素将存在。(如果没有,则
    getElementById
    将返回
    null

    此代码:

    var someGlobalVar = {
        someElement: document.getElementById("someElementsID")
    };
    
    …是这样处理的,如果它在全局范围内(根据变量的名称,我假设它是):

  • 将代码添加到全局环境时(例如,通过
    脚本
    标记),将创建名为
    someGlobalVar
    的变量;它最初的值为
    未定义

  • 当该代码的逐步执行开始时(在所有
    var
    声明和函数声明都已处理之后),对象初始值设定项的处理方式如下:

  • 对象已创建
  • 属性初始值设定项
    someElement:document.getElementById(“someElementsID”)
    的计算结果如下:
  • 计算
    document.getElementById(“someElementsID”)
    部分,其结果是属性值(元素引用,或
    null
  • 属性是使用名称
    someElement
    和上一步中的属性值在对象上创建的
  • 对象的引用保存到变量
    someGlobalVar


  • 在本例中,
    someElement
    引用了一个DOM元素(不是您提到的函数)。它引用了一个返回DOM元素对象的本机函数调用……但是它是否会损害系统,它会被“调用”吗我一直在使用这个对象,还是将它设置一次并用它完成?就像其他表达式一样,它被计算,然后计算的结果被分配给lhs(接收者)。你不明白我问的是什么,它是在每次调用对象时进行计算还是只进行一次计算?我基本上是这样做的。请再次阅读我的评论。我明确表示,评估结果分配给lhs。PS:对象不被“调用”。在这种情况下,
    someElement
    指的是一个DOM元素(不是你提到的函数)。它指的是一个返回DOM元素对象的本机函数调用……但是它是否会损害系统,它会被“调用”吗我一直在使用这个对象,还是将它设置一次并用它完成?就像其他表达式一样,它被计算,然后计算的结果被分配给lhs(接收者)。你不明白我问的是什么,它是在每次调用对象时进行计算还是只进行一次计算?我基本上是这样做的。请再次阅读我的评论。我明确表示,评估结果分配给lhs。PS:对象没有被“调用”。谢谢你的正确回答。不用担心,@zerkms是正确的-在lhs中,他指的是左手边,所以就你的问题而言:someElement=document.getElementById()的结果,而不是函数本身,因此为什么它们是等价的(getElementById()是函数)有一件事,他的回答没有提到,而你的回答没有提到,这就是“时间”方面,以及回忆方面。有了你所说的,很明显表达式只会被计算一次,永远不会再被计算,一旦对象被实例化,它就会被计算,他的“计算结果被分配给LHS”问题“何时”和“多少次”都没有得到回答。如果你明白我的意思。我不是说这是错的,它只是让这两个问题悬而未决,而这样的答案,消除了任何疑问谢谢你的正确回答。不用担心,@zerkms是正确的-lhs的意思是左手边,所以就你的问题而言:someElement=document.getElementById()的结果,而不是函数本身,因此它们是等价的(getElementById()是函数),有一件事他的答案没有解决,而你的答案解决了,