gpt4 book ai didi

对象外的JavaScript函数封装

转载 作者:行者123 更新时间:2023-11-30 10:56:02 25 4
gpt4 key购买 nike

请看下面的脚本:

var x = function(param){
this.data=param;

this.y = function(){
alert(this.data)
}

return this;
}

/*
x.prototype.z = function(){
alert(this.data);
}
*/

x(123).y();
x(123).z(); // This should behave same as y()

当我调用 x(123).y() 时,消息显示 123。在 x()

中声明的函数 y()

现在我想声明另一个函数 z(),它位于 x() 之外,但会行为与 y() 相同 [与 x() 关联]

这可能吗?如果可能怎么办?

最佳答案

调用 x() 时,您缺少一个 new。否则,函数体内的 this 将引用全局对象(浏览器上下文中的 window)而不是 x 的实例。

这就是为什么调用 z()(在取消注释代码之后)不起作用的原因。调用 y() 只是巧合,因为您创建了一个全局变量 data,其值将被下一次调用 x() 覆盖.


我不知道你想要完成什么,据我所知,这很可能不是一个好主意。无论如何,这里有一个示例,说明如何在创建对象时摆脱显式 new:

var x = function(param){
// add missing `new`:
if(!(this instanceof x))
return new x(param);

this.data=param;

this.y = function(){
alert(this.data)
}
}


x.prototype.z = function(){
alert(this.data);
}

x(123).y();
x(456).z();

关于对象外的JavaScript函数封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1518782/

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