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

时间:2012-01-12 13:50:54

标签: javascript

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

示例:

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的第二个参数中键入它。那么,为什么它不起作用呢?

1 个答案:

答案 0 :(得分:3)

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

你可以在任何代码周围放置括号,但它没有做太多。 (变量具有函数范围,因此它甚至不包含变量。)

{
  {
    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函数中是对象,因此您可以在使用其他值的任何位置使用函数值。它可以作为参数发送,并存储在变量,对象属性和数组中。

相关问题