有没有一种方法可以强制javascript元素根据最初定义的方式重新定义自身?

以斯拉

我在玩对象,构造函数和类似的东西,我想知道是否有一种方法可以根据最初定义的方式将值绑定到变量。我有以下代码:

打字稿

let cr = "create",
  ap = "apply",
  $this = {
    set: (prop, value) => {
      this[prop] = value;
    }
  };
function creator() {
  this.$ = (array: Object[]) => {
    array.forEach((kp: Object) => {
      let key = Object.keys(kp)[0];
      let val = kp[Object.keys(kp)];
      $this[key] = val;
      creator.create(key, { value: val });
    });
  };
  this.apply = (...objects: Object[]) => {
    objects.forEach((obj: Object) => {
      creator.call(obj);
    });
  };
}
function create(obj) {
  function createValues(arr) {
    let instance: Object = new obj();
    let vals: any[] = [];
    arr.forEach(name => {
      vals.push(instance[name]);
    });
    return vals;
  }
  let names: string[] = Object.getOwnPropertyNames(new obj());
  let values: string[] = createValues(names);
  return combineArrays(names, values);
}
function combineArrays(arr1, arr2): { $?: any } { // the question mark removes an IDE error
  let newObj: Object = {};
  arr1.forEach(prop => {
    newObj[prop] = arr2[arr1.indexOf(prop)];
  });
  return newObj;
}
Object.prototype.create = function(prop, options) {
  return Object.defineProperty(this, prop, options);
};
create(creator).$([
  { hi: "hi" }, 
  { bye: $this["hi"] } // this is the important stuff
]);

我在想,如果有一种方法,内部set的功能$this变化,以检测它是如何设定的,因此确定该值发生变化,所以它的价值应,如果让任何意义吗?假设您有以下内容:

let $this = {
  set: function(prop, value) {
    this[prop] = value;
  } 
}
let name = 'Ezra';
$this['name'] = name;
// then :
name = 'Bob';
// change $this.name too, so then:
console.log($this.name);
// >> 'Bob'

我相信这称为数据绑定,但我不确定如何在不产生大量代理的情况下进行操作。

服装

您所描述的并不是真正的“数据绑定”,而是按引用传递在您的示例中,您希望更新name会反映在中$this['name']仅当您将变量引用(或指针)传递给变量时,才有可能

但是,在这种情况下,变量是string,并且JavaScript中的字符串是不可变的

没有任何字符串方法可以更改其操作的字符串,它们都将返回新的字符串。原因是字符串是不可变的–它们不能更改,我们只能制造新的字符串。

因此,请逐步完成您的示例:

这将创建一个名为“ Ezra”的新字符串,并分配一个名为的变量name来引用该字符串。

let name = 'Ezra';

这将创建(或设置)在属性$this叫做'name'引用的字符串name(这是'Ezra')。

$this['name'] = name;

这将创建一个名为的新字符串,'Bob'并将其存储在名为的变量中name该变量已存在。这不会发生变异先前在那里举行的值。而是name被更新为指向新的引用。

// then :
name = 'Bob';

但是,如果要传递一个对象,则会注意到您实际上可以对其进行突变。这是因为对象是通过引用传递的,并且您可以更改该引用处的值

例如:

// Create a new value that stores an object, with a property 'firstName'
let name = { firstName: 'Ezra' };

// Assign myObject to $this['name']. Now $this['name'] and name both point to the same reference.
$this['name'] = name;

// Change the value in the object pointed-to by name
name.firstName = 'Bob'

console.log($this['name'].firstName); // <- This will output 'Bob'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有一种方法可以根据父级的类别重新定义LESS变量?

有没有一种方法可以为tmux复制模式重新定义导航键?

有没有一种方法可以重新定义函数内Javascript charCodeAt和fromCharCode调用的标准Ascii字符集?

Tensorflow:有没有一种方法可以加载预训练的模型而不必重新定义所有变量?

WPF:有没有一种方法可以重写ControlTemplate的一部分而不重新定义整个样式?

有没有一种方法可以轻松地根据printf /简单函数定义fprintf?

有没有一种方法可以根据所使用的平台来定义结构的协议属性?

有没有一种方法可以根据使用情况内联定义类?

有没有一种方法可以自定义Faktor-IPS扩展属性的输入元素?

有没有一种方法可以将自定义对象属性分配给元素?

有没有一种方法可以在Python的子类定义中调用方法?

有没有一种方法可以在TinkerGraph上定义架构约束?

有没有一种方法可以定义bash readline命令?

有没有一种方法可以在Stunnel中定义端口范围?

有没有一种方法可以在Verilog中定义类似C的结构

有没有一种方法可以在API网址中定义表名称

有没有一种方法可以将复杂的条件定义为变量?

有没有一种方法可以在python库pywhatkit中定义变量?

有没有一种方法可以直接在字典中定义函数?

有没有一种方法可以通过Javascript / jQuery动态定义CSS规则?

有没有一种方法可以强制在类下定义的Python函数返回特定数据类型的内容(而不是没有内容)?

有没有一种方法可以定义具有相似主体的多种方法?

有没有一种方法可以在bash脚本中的awk语句中定义用户定义的函数?

有没有一种方法可以为空的DataTable定义自定义html?

有没有一种方法可以强制Solr查询不使用缓存?

有没有一种方法可以强制Ubuntu在BIOS模式下安装?

有没有一种方法可以强制执行引用左值?

有没有一种方法可以根据其长度删除代码中的特定元素?

Python:为什么重新定义函数不是错误?有没有一种骇人听闻的方式来拥有该功能?