8

我是 javascript 中的对象的新手。在https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript上阅读此主题并有点困惑。

我不明白函数和对象之间的区别。一方面,函数应该是 Function 的实例(它是 Object 的子对象),因此函数也应该是 Object。

另一方面,对象本身被表示为键值对,例如:

  1. var User = {name:"Tomy", password:"secret"}

    这在代码兼容性方面与函数定义完全不同......

    我可以创建函数是两种不同的方式吗?

  2. var User = function () {this.name="Tomy"; this.password="secret";}

4

3 回答 3

6

在这个例子中,User现在持有一个对象。

var User = {name:"Tomy", password:"secret"}
typeof User === "object"
User.name === "Tomy"

在这个例子中,User将持有一个函数。此函数可用于创建对象。

var User = function () {this.name="Tomy"; this.password="secret";}
typeof User === "function"
User.name === undefined

然后,您可以创建任意数量的用户。

var user1 = new User(), user2 = new User();
user1.name === "Tomy"

一个更现实的例子是:

var User = function (name, pass) {this.name=name; this.password=pass;}

var john = new User("John", "secret")
var andrew = new User("Andrew", "passw0rd")

john.password === "secret"

通常构造函数(生成对象的函数)比对象字面量更灵活,并且允许方便且一致地创建对象(错误更容易发现,重复代码更少)。

这两种方法没有跨浏览器的不一致。


要了解new关键字是什么以及在“创建时刻”有效发生了什么,请参阅 JavaScript 中的“新”关键字是什么?以及new 运算符在 JavaScript 中是如何工作的?

于 2013-08-06T11:34:04.703 回答
2

第一个创建具有两个属性的对象的实例。您可以像这样访问它们:

User.name; // Tomy
User.password; // secret

第二个创建对象的定义,您可以为其创建单独的实例,并且它们将具有其属性的单独实例。例子:

var a = new User();
a.name; // Tomy
a.password; // secret
var b = new User();
b.name = "Ralph";
a.name; // Tomy
b.name; // Ralph
于 2013-08-06T11:30:37.923 回答
1

两者并非遥不可及。第一个版本创建一个具有属性namepassword设置的对象。第二个版本创建了一个尚未执行的函数;new User在调用之前没有设置任何属性。

于 2013-08-06T11:31:03.637 回答