Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有一种jQuery方式可以只对对象本身的属性进行迭代?_Javascript_Jquery_Iteration_For In Loop_Hasownproperty - Fatal编程技术网

Javascript 是否有一种jQuery方式可以只对对象本身的属性进行迭代?

Javascript 是否有一种jQuery方式可以只对对象本身的属性进行迭代?,javascript,jquery,iteration,for-in-loop,hasownproperty,Javascript,Jquery,Iteration,For In Loop,Hasownproperty,我正在创建一个类似jQuery的小库,有一件事让我感到奇怪,那就是 在javascript中,我们有一个循环: 这样做的问题是,它还将迭代继承的属性,即来自对象构造函数原型的属性 例如,我们可以通过使用来了解这一点。jQuery可以做到这一点 但是,当您将一个对象传递给$时,每个,它的行为与中的…的完全相同,并在继承的属性上进行迭代。它也应该稍微慢一点,并且需要多输入几个字符 检查以查看它的运行情况以及$的源代码。每个 所以我的问题是,jQuery中是否有只包含自己属性的对象迭代方法?如果不是,

我正在创建一个类似jQuery的小库,有一件事让我感到奇怪,那就是

在javascript中,我们有一个循环:

这样做的问题是,它还将迭代继承的属性,即来自对象构造函数原型的属性

例如,我们可以通过使用来了解这一点。jQuery可以做到这一点

但是,当您将一个对象传递给
$时,每个
,它的行为与
中的…的
完全相同,并在继承的属性上进行迭代。它也应该稍微慢一点,并且需要多输入几个字符

检查以查看它的运行情况以及
$的源代码。每个

所以我的问题是,jQuery中是否有只包含自己属性的对象迭代方法?如果不是,库应该这样做吗


编辑:因为jQuery不这样做,所以如果这有用,您也可以回答。我的意思是,我看不出自己想要迭代原型属性,但可能我遗漏了什么。

jQuery行为是有意义的,因为您可以选择在循环中添加hasOwnProperty检查,也可以不添加


我可以看出,在某些情况下(克隆、子类或任何您称之为继承的属性)循环使用继承的属性可能很有用。

也请看一下这里,找到它的唯一方法是使用
hasOwnProperty
。在较新的浏览器中还有
Object.keys()
。@Pointy,很高兴知道)可能会更好。快速注意:确保如果在
中为
-
使用本机
,在
中为
键使用
var
for(obj中的var键)
。否则你会得到一个意外的全局。(除非您真的希望
是全局的,在这种情况下,您可能会找到一种更好的方法来做任何您想做的事情。)其他简要说明:当使用
hasOwnProperty
时,保存引用而不是通过点符号调用它可能会稍微安全一些:
var has=Object.prototype.hasOwnProperty;has.call({abc:'xyz'},'abc')。“某些场景”部分是我无法理解的部分。你有什么例子吗?(而且,如果必须添加
hasOwnProperty
检查,还可以在
中使用
for…并保存一些键入内容)。例如:defaultAjaxSettings={type:“GET”,…},然后创建一个克隆,该克隆具有一些特定设置,但其余部分继承自默认设置?我明白了。。。但通常我们会使用类似于
$的东西来处理选项映射中的默认值,对吗?或者在某些框架中,更常见的是通过继承这样做?对。。。老实说,我不知道。显然,当您需要将更改传播到默认设置时,您会希望使用继承,但我没有更好的示例。此外,我认为$的兴趣在于提供一个可与各种集合(对象、数组)一起使用的抽象层,在一些场景中,例如模板化,这可能会很有趣。但我也没有一个具体的例子。。。
for (var key in obj) {
    console.log(key + ': ' + obj[key]);
}