gpt4 book ai didi

javascript - 为什么 e.name 不返回与 e().name 相同的值?不是事件对象

转载 作者:行者123 更新时间:2023-11-30 17:34:22 27 4
gpt4 key购买 nike

我基本上一直在玩弄一些 JavaScript 链接,并查看 jQuery 源代码试图了解它们是如何做某些事情的。我知道它们在全局 $ 上的功能与在 $() 上的功能不同,但我认为有些是相同的?

我也想知道我是否可以得到一些帮助来了解发生了什么。不确定链接还有哪些其他用例,但我想更好地了解内部结构。

这是我的代码(它现在可以正常工作,请查看 answer 进行说明:

/*
Chaining stuff
*/

var e = function() {
return new e.ext.init();
};

e.ext = {
_name: 'test',
init: function() {
console.log('init');
return this;
},
chainA: function() {
console.log('chainA');
return this;
},
chainB: function() {
console.log('chainB');
return this;
}
};

/*
* Fix the value of `this` in `e.ext.init
* by setting its prototype to the value
* of `e.ext`
*/
e.ext.init.prototype = e.ext;

// e and e() can have the same properties if we loop through e.ext and add them
for(var prop in e.ext) {
e[prop] = e.ext[prop];
}

// log output
console.log('-- logging chaining demo --\n');
console.log(e._name);
e.chainA().chainB();

console.log('\n');
console.log(e()._name);
e().chainA().chainB();

http://jsfiddle.net/edhedges/EM6Ck/

编辑:这怎么离题了?另外,为什么这些函数在 e 中工作,例如 e.chainA()e().chainA() 工作相同?

最佳答案

在您的示例中,e 是一个函数,而不是一个对象。所以你的瓶颈在这里:

for(var prop in e.ext) {   
e[prop] = e.ext[prop];
}

我在每次赋值后添加console.log(e[prop]);,得到空字符串和三个function()结果;

此外,当我调用 e['chainA']() 时,我得到了 chainA 响应。所以我想你实际上可以分配其他类似的功能,制作某种形式的组合。但它不适用于其他任何东西。

实际上 Javascript: The Definitive Guide 提出了这个例子:

uniqueInteger.counter = 0;
// This function returns a different integer each time it is called.
// It uses a property of itself to remember the next value to be returned.
function uniqueInteger() {
return uniqueInteger.counter++;
}

而且有效!

console.log(uniqueInteger()); //0
console.log(uniqueInteger()); //1
console.log(uniqueInteger.counter); //2

即使变量也被引用为数组字面量,它仍然有效。因此,这种奇怪行为背后的真正原因似乎在其他地方。

我傻了。这是您的答案(来自 MDN ):

 Function.name
The name of the function.

所以你只是想覆盖 Function 对象的内部属性,我想这不会那样工作。它是一个空字符串,因为 e 是一个匿名函数,现在这很有意义。

关于javascript - 为什么 e.name 不返回与 e().name 相同的值?不是事件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22352946/

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