我刚刚学习来自c#的javascript。我已经看到了两种创建对象的方法。两者有什么区别?他们似乎做同样的事情。
var myContact = {
first: "greg",
last: "gum",
fullName: function()
{
return this.first + " " + this.last;
}
}
alert(myContact.fullName());
var myContact2 = function () {
this.first = "greg";
this.last = "gum";
this.fullName = function()
{
return this.first + " " + this.last;
}
};
var aContact = new myContact2();
alert(aContact.fullName());
答案 0 :(得分:2)
方法调用 - 存储在对象属性中的方法JavaScript函数。在方法调用中,对象成为调用上下文,函数体可以使用关键字this
引用该对象。
var myContact = {
first: "greg",
last: "gum",
fullName: function()
{
return this.first + " " + this.last;
}
}
构造函数调用 - 如果函数或方法调用前面有关键字new
,那么它是构造函数调用。
var myContact2 = function () {
this.first = "greg";
this.last = "gum";
this.fullName = function()
{
return this.first + " " + this.last;
}
};
如果构造函数没有参数,则可以省略参数列表和paranthesis。所以这两个是等价的:
var aContact = new myContact2();
var aContact = new myContact2;
答案 1 :(得分:2)
- 可以通过文字创建
- 可以分配给变量,数组条目和其他对象的属性
- 可以作为参数传递给函数
- 可以作为函数
的值返回- 可以拥有可以动态创建和分配的属性
- 以上所有
- 此外,可以调用函数
由于JavaScript中的函数拥有所有功能对象,因此它们被称为第一类对象。
其他信息:
在JavaScript中有四种方法来调用函数。您在此处使用它的方式是按构造函数调用
当通过new
运算符将该函数作为构造函数调用时,其上下文被定义为新的对象实例。这意味着我们可以通过this
参数初始化构造函数中的值(除了通过原型附加属性)。
var obj = function() { this.whatever = "hello"; } // 'this' refers to `obj`
var instance = new obj();
alert(instance.whatever); // alerts 'hello'

如果我们选择这样做,在构造函数内创建的实例成员将遮挡原型中定义的同名属性。构造函数中的绑定操作始终优先于原型中的绑定操作。
调用构造函数时,会发生以下情况:
this
参数传递给构造函数,因此成为构造函数的函数上下文。其他3个JavaScript函数调用:
- 作为一项功能
当使用()
运算符调用函数时,会发生这种类型的调用,而函数上下文是全局上下文 - 通常是窗口对象。例如:
function example(){ return this; };
alert(example() == window); // invocation as a function (`this` is the global context)

- 作为一种方法
将函数分配给对象和的属性时,通过使用该属性引用该函数来发生调用。该对象成为函数上下文,并通过this
参数在函数中可用。这是JavaScript允许编写面向对象代码的主要方法之一。例如:
var example = {};
example.whatever = function(){ return this; };
alert(example == example.whatever()); // invocation as a method (`this` is the object to which this method belongs)

- 通过apply()或call()方法
var context = {};
function example() {
alert(this == context); // showing that we set the context
}
example.call(context); // invocation using `call`

唯一的区别是call()
将函数参数视为逗号分隔,apply()
获取数组中的函数参数。
答案 2 :(得分:0)
myContact是一个单一的实例。
myContact2你可以创建多个实例。
你遗漏了
var myContact3 = function(){
return {
first: "greg",
last: "gum",
fullName: function()
{
return this.first + " " + this.last;
}
};
};
:)
在您想要原型功能之前,这两个世界中最好的一个!