我不太明白如何正确说话。例如,在第一种情况下,在构造函数或内置 Object 上调用 value() 方法?
let obj = { num1: 1, num2: 2, num3: 3 };
let values = Object.values(obj); //на чем происходит вызов?
这里调用发生在数组本身上?
let arr = [1, 2, 3, 4];
let iteratorValues = arr.values(); //?
1号和2号有什么区别?据我所知,内置构造函数的原型 - 即 内置原型,由此构造函数创建的常规对象也具有内置原型。好吧,也就是说,如果一个原型有一个Object
(内置构造函数),那么随后这个原型也将在这个函数Object
创建的对象中。我的意思是为什么我不能直接打电话obj.values()
?毕竟,理论上,如果这个方法是 in Object
,那么它应该是 in obj
。
还是values()
不在原型中,而是在对象本身中Object
?
我认为通过示例会更清楚
在第一种情况下,我们调用静态方法。在我的示例中,这是
getAsObj
. 该变量没有这样的方法myMap
,即 实例没有,因此我们将在控制台中看到一个错误。如果该方法是静态的,那么应该像这样调用它НазваниеКласса.имяСтатическойФункции
。静态方法和静态属性都不能在类实例上调用。相反,它们是在类本身上调用的。因为我可以安全地打电话getAsObj
给班级MyMap
在第二种情况下,我们调用普通方法。在我的示例中,这是一种
getAsObj
我可以轻松调用类实例的方法。但是现在我不能调用getAsObj
这个类本身,所以我们会在控制台看到一个错误