gpt4 book ai didi

javascript - 在 jQuery 中实现安全取消引用?

转载 作者:行者123 更新时间:2023-11-28 09:59:04 25 4
gpt4 key购买 nike

我正在研究使用 jQuery 对象作为安全的取消引用器,就像它们在 Groovy 中一样。我试图解决的问题是我从 AJAX 调用中检索 JSON,但这些调用可能没有我要查找的值。我想要一种方便的方法来检查我是否在尝试使用该值执行某些操作之前返回了该值。

对于非 Groovy 程序员,如果 Groovy 中的变量为 null,则调用它的方法会默默失败,而不是抛出空指针异常。

我可以使用 jQuery 运算符从 null 变量创建一个空对象,如下所示:

var myvar
$(myvar).chainedfunc()

在此示例中,chainedfunc 仍将在空对象上执行。

如果原始值为空,有没有办法阻止 chainedfunc 执行?

我知道我可能不得不忍受在空对象上执行链式函数。

注意:

我将下面的想法记录下来,但我意识到逻辑是错误的。情况 1,对象为 null,在这种情况下没有类型,因此无法创建相同类型的新对象,情况 2 对象存在,在这种情况下我返回对象不变。不过,总体问题仍然有意义。

在这种情况下,问题就变成了如果原始值不是对象而是数组会怎样,因为我用它创建了一个对象以避免 null 错误。对于这种情况,我有以下功能:

$.fn.safe = function(){
if (this.get(0)){
return this.get(0)
}
else return []
}

在这种情况下,我假设原始数据是一个数组。理想情况下,我希望能够确定原始类型并返回相同类型的空实例。

// this does not work because type is not a constructor
$.fn.safe = function(){
var type = typeof this.get(0)
return this.get(0) || new type()
}

最佳答案

为什么要使用 jQuery?您可以只创建自己的一组对数据进行操作的函数,这些函数在对数据执行任何操作之前都会检查数据的完整性,也可以使用方法创建自己的对象,其中方法检查数据。这就是 jQuery 所做的一切。

常规功能:

function func1(data, arg) {
if (!data) return;
// carry out func1 on data here
}

function func2(data, arg) {
if (!data) return;
// carry out func2 on data here
}

或者作为一个对象:

function dWrap(data) {
this.data = data;
}

dWrap.protototype = {
func1: function(arg) {
if (!this.data) return(this);
// do func1 operation here
return(this);
}

func2: function(arg) {
if (!this.data) return(this);
// do func2 operation here
return(this);
}
toString: function() {
if (!this.data) {
return("");
}
return(this.data.toString());
}
};

var myData = 45;
var x = new dWrap(myData);
x.func1(3).func2("foo");
x.toString(); // returns "45"

var y = new dWrap(null);
y.func1(3).func2("foo").toString(); // returns ""

关于javascript - 在 jQuery 中实现安全取消引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9502770/

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