1

我们可以在对象本身内执行一个函数吗?请参见下面的代码:

obj = {
     name:function(){alert("maizere");}
};

obj.name()也意味着相同,即访问对象并执行函数。为什么不在对象本身内部执行,如下所示:

obj = {
     name:function(){
         alert("maizere");
     },
     name();
};

既然obj = new obj() == { obj() }对?

当我尝试这个时,我没有成功。这里有什么问题还是我错了?

4

6 回答 6

4

以下符号:

var obj = {};

被称为“对象字面量”。它需要一个键/值对列表,即对象的属性。

仅此而已。

于 2012-12-22T14:45:17.283 回答
1

您尝试的语法没有意义。

如果您希望立即执行某个功能,可以执行以下操作。这通过将您的函数转换为表达式而不是声明来工作:

obj={
  name: (function(){
    alert("maizere");
  })()
};

但是,这与以下内容不同:

obj={
  name: function(){
    alert("maizere");
  }
};

obj.name();

因为this里面每个不同的函数调用都会不同。前者thiswll 指向全局对象(通常Window在浏览器中),后者this指向obj.

于 2012-12-22T14:47:15.227 回答
1

对象字面量不是类,因此与对象类似,对根对象没有作用域window。此外,对象字面量的语法结构并不是为了做到这一点。它是一个异构列表键值对。像这样:

var o = { a : b };

JavaScript 没有类。但是,该with语句(很少使用)允许这种行为(在不指定对象根的情况下访问对象的属性或方法)。

var obj = { name: function() {} };

with ( obj ) {
    name();
}

但是这个结构不应该在代码中使用,因为它会导致问题。但是作为对您问题的回答,它可以完成工作。

于 2012-12-22T14:50:04.483 回答
0

是的,肯定有问题。

JavaScript 对象由名称:值对组成,因此您不能打破该模式并做其他事情。请查看详细信息

于 2012-12-22T14:53:32.257 回答
0

如果你想要一个基于类的语言意义上的构造函数,这可能是一个更好的方法:

// "class" definition and constructor
var MyObject = function() {
  this.name();
};
// method
MyObject.prototype.name = function() {
  alert("maizere");
};

// create an object instance of your "class"
var obj = new MyObject();

请注意,Javascript 没有类。但是,该术语有时有助于理解 Javascript 构造函数的方法。

于 2012-12-22T15:42:53.240 回答
0

JavaScript 有几个内置对象,例如 String、Date、Array 等。

对象只是一种特殊的数据,具有属性和方法。

访问对象属性的语法是:

objectName.propertyName

例子:

var message="Hello World!";
var x=message.length;

执行上述代码后,x 的值为:12

注意消息是对象。

这是另一个使用 new 实例化对象并向其添加属性的示例。

person=new Object();
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue";

现在,这是一个类示例:

function HelloWorld(hour)
{
  // class "constructor" initializes this.hour field
  if (hour)
  {
    // if the hour parameter has a value, store it as a class field
    this.hour = hour;
  }
  else
  {
    // if the hour parameter doesn't exist, save the current hour
    var date = new Date();
    this.hour = date.getHours();
  }

  // display greeting
  this.DisplayGreeting = function()
  {
    if (this.hour >= 22 || this.hour <= 5) 
      document.write("Goodnight, world!");
    else
      document.write("Hello, world!");
  }  
}

在此示例中,HelloWorld 是类。

于 2012-12-25T14:55:37.847 回答