Если я прав, вы хотите, чтобы объект вел себя как, ну, объект, кроме тех случаев, когда он передается функции? переменная seven
в вашем примере - это объект, поэтому нет способа, чтобы он просто возвращал 7
при указании в любом месте.
Более того, num
по существу является частной переменной. Поэтому использование for...in
и JSON.stringify
обмана не принесет вам пользы. То, что вы должны сделать, либо сделать переменной num
объектом объекта (this.num
), либо создать функцию-член (this.getNum(){return num};
).
После этого, вы можете использовать свойство/метод свободно:
alert(seven.num);//alerts 7, but requires num to be declared as a property
alert(seven.getNum());//alerts 7, requires the method
я предлагаю использовать метод в этом случае, так как вы, очевидно, с помощью этой функции и как конструктор и регулярная функция (Который, я могу добавить, это не очень хорошая идея).
На слегка педантичной заметку: обычай заглавной первую букву конструктора, а не использовать имена, которые могут конфликтовать с собственными типами JS (строка, число, объект, функции ...)
function MyNumber(n)
{
this.num = n;//as a property
this.add = function(x)
{
return this.num + x;
}
}
var seven = new MyNumber(7);
alert(seven.num);//alerts 7
Хотя, если Num не должно быть изменено догадываясь, что -Я это так здесь- дополнительная функция является маршрут я бы:
function MyNumber(n)
{
var num = n;
this.add = function(x)
{
return num + x;
};
this.getNum = function()
{
return num;
};
}
alert(seven.getNum());
Если вы еще планируете использовать конструктор в качестве обычного функции, вам лучше всего проверить, как была вызвана функция/конструктор:
function MyNumber(n)
{
var num = n;
if (!(this instanceof MyNumber))
{//not called as constructor
return num;//or a function, or something else (treat this as a closure)
}
//Same code as above goes here
}
Возможно, я немного отвлекся от темы, но я не могу не подумать, что вы можете прочитать о закрытии, объектах и конструкторах в JavaScript.
Возможно, вы хотите узнать о фабричном шаблоне функции: https://developer.mozilla.org/en/JavaScript/Guide/Closures – nhahtdh
Вы хотите иметь как числовое значение *, так и * его свойства, такие как '.add '? – pimvdb
Напоминает мне образец декоратора питонов. –