Если я правильно понимаю, вы хотите использовать переменные из глобальной области видимости в конструкторе вашего объекта на нескольких уровнях.Помимо этого, ну, в общем, рискованно выразиться вежливо, поскольку на самом деле невозможно быть уверенным в значении этих переменных, вы можете указать область видимости следующим образом:
var property = 'foo';
var value = 'bar';
var obj = {val : window.value};//doesn't work for property id's
var obj[window.property] = obj.val;
alert(obj.foo);//alerts 'bar'
В качестве альтернативы,заставьте ваш конструктор принимать параметры:
function Foobar(prop,val)
{
this[prop] = val;
}
var obj = new Foobar('foo','bar');
alert(obj.foo);//alerts 'bar'
Во втором примере вложенные объекты могут использовать аргументы, передаваемые их «родительскому» / содержащему объекту, например:
function Foobar(prop,val)
{
Foobar.prop = prop;
Foobar.val = val;
...
this.subObj = {};
this.subObj[Foobar.prop] = Foobar.val;//var prop from scope Foobar, same as window
}
Использование преимуществтот факт, что переменные функций или объектов могут быть сделаны статическими, вы можете даже сделать что-то вроде этого:
Foobar.prop = (typeof Foobar.prop !== 'undefined' ? Foobar.prop : prop);
//or
Foobar.subObj= {new Foobar};//extending parent object
Foobar.subObj.newProp = 'newVal';