javascript的对象问题

object issues of javascript

本文关键字:问题 对象 javascript      更新时间:2023-09-26

我构造了一个函数,定义为

var Func1 = function() 
{
    return {
             alert: function() { alert( "Lady Gaga" ); }
           };
};

我将Func1()赋值给一个变量,像这样:

var func1 = Func1();

我发现了一些对我来说没有意义的东西,Func1()为func1创建了一个对象,尽管我没有把new放在它的前面。

对象不是只能由new创建吗?

当上面的表达式被执行时发生了什么?

JavaScript不需要new关键字。上面的代码将返回值赋给新创建的func1变量。

当你编写一个javascript文字对象(类似json)时,它相当于用new操作符创建一个新对象并分配其属性。

var a = { test: 123, caca: 'pipi' };

相同
var a = new Object();
a.test = 123;
a.caca = 'pipi';

看看您从Func1返回的内容:

return {
    alert: function() { alert( "Lady Gaga" ); }
};

返回一个对象,该对象被赋值给func1。因此,func1 = Func1();简单地调用Func1,并将结果赋值给func1

你的函数正在创建一个对象:

{
    alert: function() { alert( "Lady Gaga" ); }
};

使用该符号,就不需要使用new操作符。

The()实际执行函数,返回一个带有方法的对象(方法是函数类型的属性)。

在JS中,你不显式调用new来创建新对象:

var song = {
  name: "Entrenched",
  artist: "Morbid Angel"
};
song.artist = "Bolt Thrower";

这将创建一个具有属性nameartist的对象。

与函数一起使用的new关键字是创建对象的一种方法,但不是唯一的方法。这意味着将使用作为构造函数调用的指定函数创建一个新对象——在构造函数中,this关键字将引用新对象,并返回新对象。如果不使用new关键字调用同一函数,则不会创建对象。

对象字面语法(例如,var x = { };return { };)是创建对象的另一种方式。