You should use a variable name string, but I think it will be as close as you ever have in JavaScript:
var createReference = function (context, prop) {
return function () { return context[prop]; };
};
var x = 5;
var refX = createReference(this, 'x');
x = 6;
alert(refX());
Edit:
In your updated script, it would be better to use closure directly, so you don't need to use a variable name string:
var createReference = function (context, func) {
return function () { return func.call(context); }
};
Provider = function() {
};
Provider.prototype.x = 5;
Provider.prototype.getXRef = function() {
return createReference(this, function () { return this.x; });
};
Provider.prototype.incrementX = function() {
this.x = this.x + 1;
};
var provider = new Provider();
var refX = provider.getXRef();
provider.incrementX();
alert(refX());