gpt4 book ai didi

javascript - 使用 Object.freeze() 扩展函数对象 - 无法添加字段

转载 作者:行者123 更新时间:2023-11-28 09:47:56 24 4
gpt4 key购买 nike

很好奇为什么下面的代码会给出如此“奇怪”的结果:

var f = function() {}
$.extend(f, Object.freeze({foo1:"bar1"}));

在 Chrome 中输入(请参阅更新 - 它是在 Chromium 中,而不是此处和下面的 Chrome)控制台:

> f.foo1

Chrome控制台中的结果是:

> undefined

此外,尝试以下操作:

$.extend(f, {foo2:Object.freeze([1,2,3])});

在 Chrome 控制台中输入:

> f.foo2

结果更奇怪:

> function Object() { [native code] }

我做错了什么?为什么使用 Object.freeze() 会产生这些影响?

更新:不在 Chrome 中,而是在 Chromium 18(撰写本文时 Ubuntu 上的最新版本)中。我想这是一个实现错误。接受唯一的答案,尽管效果仍然可以在我的浏览器上重现。

最佳答案

我认为这不像你描述的那样:have a look at the jsfiddle here

它像这样实现你的代码:

var f = function() {}
$.extend(f, Object.freeze({
foo1: "bar1"
}));

$.extend(f, {
foo2: Object.freeze([1, 2, 3])
});

$(document).ready(function() {
document.getElementById('div').innerHTML = f.foo1.toString() + '<br/>' + f.foo2.toString()
});​

Object freeze不会阻止将属性和函数添加到函数 f 中。它只是卡住您实际卡住的对象。 jQuery 的 extend 采用第一个参数并使用第二个参数扩展它,因此您的情况下的卡住对象不会被触及。

关于javascript - 使用 Object.freeze() 扩展函数对象 - 无法添加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11508028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com