Javascript 如何通过引用传递属性

Javascript 如何通过引用传递属性,javascript,knockout-es5-plugin,Javascript,Knockout Es5 Plugin,有没有办法通过引用而不是通过值将对象属性传递给函数 ES5属性可以有getter和setter。如何传递使用getter和setter而不是getter结果的变量 现在我必须传递对整个对象的引用,而不仅仅是我想要的单个属性 有没有办法通过引用而不是通过值将对象属性传递给函数 不。事实上,“传递一个对象属性”最终没有多大意义,因为“属性”的概念如果没有它所属的实体就不存在 如果这仅仅是一个封装问题,并且不想泄露完全控制,那么您总是可以获得创造性。例如: var obj = { sensit

有没有办法通过引用而不是通过值将对象属性传递给函数

ES5属性可以有getter和setter。如何传递使用getter和setter而不是getter结果的变量

现在我必须传递对整个对象的引用,而不仅仅是我想要的单个属性

有没有办法通过引用而不是通过值将对象属性传递给函数

不。事实上,“传递一个对象属性”最终没有多大意义,因为“属性”的概念如果没有它所属的实体就不存在

如果这仅仅是一个封装问题,并且不想泄露完全控制,那么您总是可以获得创造性。例如:

var obj = {
    sensitive: 'do not share me!',
    public: 'hi there',
    setPublic: function(val) {
        this.public = val;
    }
};

function someFunction(setter) {
    setter('new value');
}

someFunction(obj.setPublic.bind(obj));

没有办法完全按照您的要求执行,因为无论它是什么源,值类型(即非对象/数组)都将按值传递。但是,如果创建get/set函数,则可以将该函数绑定到对象

var obj = {
  _val: 0,
  val: function(x) {
    if (x !== undefined) {
      this._val = x;
    } else {
      return this._val;
    }
  }
}

function doStuff(prop) {
  if (prop() > 1) {
    prop(0);
  }
}

doStuff(obj.val.bind(obj));

始终可以传递两个参数,即对象和属性名:

function change(obj, prop, newVal) {
  obj[prop] = newVal;
}

var obj = { foo: 1 };

change(obj, 'foo', 99);
console.log(obj); // => { foo: 99 }

简短的回答是否定的,因为正如您在问题中已经提到的,基本类型是按值传递的

有一个详细的解释,并链接到

然而,如果您确实需要这样做,您可以为您试图传递的特定属性创建一个包装器对象,但是这不仅仅是一个解决方案,而是一个解决方案