我是javascript中对象的新手。在https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript上阅读这个主题,并有点困惑。
我不明白功能和对象之间的区别。一方面,函数应该是Function的实例(它是Object的子元素),因此函数也应该是一个Object。
另一方面,对象本身表示为键值对,例如:
var User = {name:"Tomy", password:"secret"}
这与代码兼容性方面的函数定义完全不同......
我可以用两种不同的方式创建函数吗?
var User = function () {this.name="Tomy"; this.password="secret";}
答案 0 :(得分: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
keyword是什么以及在“创作时刻”有效发生了什么,请参阅What is the 'new' keyword in JavaScript?和How does the new operator work in JavaScript?
答案 1 :(得分: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
答案 2 :(得分:1)
这两者并不等同。第一个版本创建一个对象,其中设置了属性name
和password
。第二个版本创建一个尚未执行的函数;在调用new User
之前没有设置属性。