似乎行为与引用类型不同的引用类型
Reference types which doesnt seem to behave like reference types
本文关键字:引用类型 更新时间:2023-09-26
从我所读到的内容来看,函数和对象应该是javascript中的引用类型。因此,如果我在我的代码中得到了一个对象,并且这个对象发生了变化,它应该会立即影响对它的所有引用。但在下面的示例中,它不会发生:
Myobject = {
key1: 123,
key2: function() {return this.key1}
}
f = Myobject.key2;
Myobject.key2 = function() {return 'test'};
f();
key2 的行为类似于基元类型,如果 key2 发生更改,则通过其引用保留其初始状态。那么这种数据类型机制在javascript中是如何工作的呢?
f = Myobject.key2;
这样做f
指向分配给key2
的函数,我们称之为"原始函数"。
Myobject.key2 = function() {return 'test'};
这样做是key2
指向另一个函数 - 一个不影响f
指向的操作,它仍然是"原始函数"。
可视化:
// key2 = undefined
// f = undefined
Myobject = {
key1: 123,
key2: function() {return this.key1}
}
// key2 = function() {return this.key1}
// f = undefined
f = Myobject.key2;
// At this point, they point to the same function
// key2 = f = function() {return this.key1}
Myobject.key2 = function() {return 'test'};
// At this point, you changed key2 but f still points to the original function
// key2 = function() {return 'test'};
// f = function() {return this.key1}
f();
// possibly "undefined" because this = window if called this way
// and there's possibly no key1 on window
相关文章:
- 同步 ejGrid 不显示(未捕获的引用和未捕获的类型错误)
- 似乎行为与引用类型不同的引用类型
- 值和引用类型
- 如何引用引导类型预处理的数据
- 引用被分配给哪些类型,而不是在Javascript中被复制
- 循环中的 Javascript 引用:“未捕获的类型错误:无法读取未定义的属性'值'”
- Javascript - 原始与引用类型
- 为什么像这样向 JavaScript 引用类型添加方法不起作用
- 变量存储函数作为基元类型或引用类型
- 如何在Javascript中使用共享的、不可变的引用类型来跟踪更改
- EXT JS 5:为什么我不能获得引用类型的模型对象
- Array.prototype.引用类型上的恶意行为
- 作为条件和引用类型的函数
- 正确检测抽象对象/引用类型的方法
- 引用类型值和初始化
- 字符串:javascript中的基本类型变量或引用类型变量
- javascript中的值类型引用类型对象
- 在JQuery中,将一个对象数组复制到另一个数组是它的引用类型
- JavaScript引用类型对象和普通对象的区别
- javascript中的引用类型