JS, используя объектные литералы для замены var - PullRequest
1 голос
/ 22 марта 2012

в течение долгого времени я использовал объектные литералы для замены нескольких операторов var в моем коде. Вот типичный пример:

(function(){
  var replaceVars = {};
  function x(){
    replaceVars.num=886;
}
  function y(){
    x();
    replaceVars.cal = replaceVars.num*99;
    return replaceVars.cal;
  }
})();

поэтому мой вопрос: что-то не так с этим? я имею в виду следующие положительные стороны: 1) во всем моем коде есть только один оператор var. 2) в замыкании все дочерние элементы могут получить к нему доступ (это означает, что свойства replaceVars становятся глобальными в рамках замыкания. Это похоже на создание глобально подобного дочернего объекта (замыкание) внутри истинного глобального объекта (окна) 3) я могу предварительно определите свойства, которые готовы к немедленному использованию:

var replaceVars = { что-то1: «некоторая ценность», что-то2: «какая-то другая ценность» }

Так может ли кто-нибудь подумать о каких-либо минусах в моем способе ведения дел?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Я не думаю, что есть что-то неправильное с использованием объекта контейнера. Тем не менее, я бы сделал привычку объявлять переменные, необходимые для связанного кода:

var replaceVars = {
    num: null,
    cal: null
};

Но, опять же, это также работает:

(function () {
  var num, cal;

  function x(){
    num = 886;
  }

  function y(){
    x();
    cal = num * 99;
    return cal;
  }
})();  
0 голосов
/ 22 марта 2012

Я не уверен, что вы пытаетесь сделать, но если вы просто хотите скрыть объекты внутри другого объекта и, например, сделать их доступными только с помощью методов, я бы сделал это следующим образом:

var objects = (function() {
  var x = 42;
  var y = 12;

  var container = {};
  container.getX = function getX() {
    return x;
  }
  container.getY = function getY() {
    return y;
  }
  container.getSum = function getSum() {
    return x + y;
  }

  return container;
})();

На мой взгляд, читать намного проще.

...