1

就像探索 javascript 作为我对整个编程的第一个参考,但由于我不是专业人士,所以无法理解很多东西。因此,如果有人能解释幕后实际发生的事情,将不胜感激。

在 body 标签中,我声明了两个函数,一个带有“new”,另一个没有。

  • 新功能 sayHi () {alert('hi')}
  • 函数 sayHello () {alert('hello')}

所以第一个函数是在不使用 () 的情况下调用的,所以我可以在文档加载时看到“hi”,因为我理解正确。但是要看到“你好”,我应该在代码的某处使用类似 sayHello.call() 的东西。

我想我理解“new”运算符的主要目的是创建对象实例,此外甚至可以假设声明函数对象的实例有或没有“new”运算符之间存在细微差别。

但是实际上会发生什么,以便文档在定义时使用“new”运算符执行函数,而另一个只是留在内存中的某个地方?

4

2 回答 2

3

1)您在定义函数时不使用new,而是new在您调用函数以创建新对象时使用。

2)如果new在定义函数时使用,则意味着它将立即触发。这有时会很方便…………但这确实不是初学者应该学习的方式。此外,这种技术更被接受的版本称为 IIFE(立即调用函数表达式),它看起来像

(function () {
/* function stuff in here */
}());

代替

new function () { /* function stuff in here */ }

如果您尝试以这种方式定义函数,稍后尝试使用它时会出现错误(因为未定义)。

这里有两种实际定义函数的方法:

var sayHi = function () { console.log("Hi!"); };

function sayHello () { console.log("Hello"); }

这些都不用new

为了给他们打电话,让他​​们做他们的工作,你不需要使用.call(). .call()会起作用,但它有一个特殊的用途,你在很长一段时间内都不需要。

您需要做的就是:

sayHello();
sayHi();

当您想要制作某种对象时,应使用 New。

在 JavaScript 中创建对象非常简单:

var obj = {};
var person = { name : "Bob" };

person.name; // "Bob"
person.age = 32;

使用对象非常非常容易。

但是在其他编程语言中,您需要classes的就像对象的蓝图一样。

在 JS 中,你可以创建一个这样的类:

function Person (name, age) { this.name = name; this.age = age; }

然后像这样使用它:

var bob = new Person("Bob", 32);
bob.name; // "Bob";
bob.age;  // 32;

看看我放哪里了new
我用了一个造人的功能,我说我想bob成为一个new Person.

但同样,在 JS 中,这可以很简单:

var mike = { name : "Mike", age : 20 };

不必构建函数,不必使用new. 它刚刚奏效。

于 2013-02-18T11:27:48.450 回答
1

这些是完全不同的事情。第二个是标准的 javascript 函数声明(可以用 调用sayHi();),而第一个应该重写为

new (function sayHi() { alert('hi'); });

现在你可以看到它是一个(命名的)函数表达式,它直接传递给了new操作符。这不应该使用,如果你真的想立即调用它(有应用程序)使用(function(){…})());

于 2013-02-18T11:27:57.593 回答