不可能在匿名对象中声明方法吗

Is it impossible to declare methods in an anonymous object?

本文关键字:声明 方法 对象 不可能      更新时间:2023-09-26

术语匿名对象可能是一个令人困惑的术语,所以请允许我澄清:我所说的匿名对象是指对象的声明,就像定义匿名函数一样。

示例:

someFunction=function(){}
someObject={}

但更具体地说是匿名的,因为它们可以被放置在这样的对象或函数的变量可以被放置的任何地方。最好的(也是直接相关的)例子是Object.create,现在就像使用window.setTimeout(function(){},ms)(除了它自己的函数的查询),而你只需要把一个函数放在变量的位置,我希望能够做到这一点:object.Create(some__proto__object,{cake:false}),在我尝试包括方法之前,它都很好。然后它抛出TypeError:描述符必须是对象

所以我在控制台上做了一些测试,我放了{}{cake:"cheesecake",taste:"delicious"}好,

variable={
   cake:"cheesecake",
   taste:"celicious",
   stateTheCatch:function(){console.log('The cake is a pie!')}
}

它有效,但是

//In practical use: 
//Object.create(inheritanceObject,
{
  cake:"cheesecake",
  taste:"celicious",
  stateTheCatch:function(){console.log('The cake is a pie!')}
}//);

已损坏,并且不算作对象。为什么这么糟糕?因为除了使用标识符之外,您还在Object.create的第二个参数中这样键入它。那么,它为什么不起作用的线索呢?

这是因为您根本没有创建对象。当用作语句时,方括号会创建一个代码块,而不是对象文字。

你可以在任何代码周围加上括号,但作用不大。(变量有函数作用域,所以它甚至不作用域变量。)

{
  {
    var x = 41;
    {
      {
        x++;
      }
    }
  }
  alert (x);
}

如果您使用对象作为值,它会起作用:

function x(y) { y.tateTheCatch(); }
x({
  cake:"cheesecake",
  taste:"celicious",
  tateTheCatch:function(){console.log('The cake is a pie!')}
});

在Javascript中,函数是对象,因此您可以在使用其他值的任何地方使用函数值。它可以作为参数发送,并存储在变量、对象属性和数组中。