首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >似乎不像引用类型的引用类型

似乎不像引用类型的引用类型
EN

Stack Overflow用户
提问于 2015-03-08 16:44:06
回答 1查看 9关注 0票数 0

据我所知,函数和对象应该是javascript中的引用类型。因此,如果我得到了一个对象,在我的代码中,这个对象发生了变化,它应该会不可避免地影响到它的所有参照物。但在下面的例子中,它并没有发生:

代码语言:javascript
复制
Myobject = {
  key1: 123,
  key2: function() {return this.key1}
}

f = Myobject.key2;

Myobject.key2 = function() {return 'test'};

f();

key2的行为类似于primitve类型,通过它的引用来保持key2的inital状态。那么,这种数据类型的机制在javascript中工作得如何巧妙呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-08 16:47:59

代码语言:javascript
复制
f = Myobject.key2;

这是让f指向分配给key2的函数,我们称之为“原始函数”。

代码语言:javascript
复制
Myobject.key2 = function() {return 'test'};

这样做是让key2指向另一个函数--一个不影响f指向的操作,它仍然是“原始函数”。

可视化:

代码语言:javascript
复制
// 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28929064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档