gpt4 book ai didi

javascript - JavaScript 中的构造函数概念

转载 作者:可可西里 更新时间:2023-11-01 02:51:54 25 4
gpt4 key购买 nike

在我的一个问题中,我得到了以下代码作为答案之一。我对语言的理解现在已经好得多了,只有一个小问题。

var person = function() {
this.firstName = "";
this.lastName = "";
}

person.prototype.showFullName = function () {
console.log(this.firstName + " " + this.lastName);
}

var perObj = new person();
perObj.firstName = "Penelope";
perObj.lastName = "Barrymore";
perObj.showFullName();

考虑对象,

var person = function() {
this.firstName = "";
this.lastName = "";
}

当我调用这个对象时,

var perObj = new person();

这类似于构造函数之类的东西吗?

瞬间一个代码

var perObj = new person(); 

调用后会自动执行下面两行吗?

 this.firstName = "";
this.lastName = "";

而且在我正在研究的其中一个博客中,文件名是否为 Samplescript.js 并且函数是否在其中使用相同的名称编写,例如 var Samplescript=function() {},这个函数会被视为构造函数吗?请向我说明这一点。

尽管理论上事情很清楚,但实际上我没有得到关于构造函数的任何令人满意的答案,在这个例子中,它的编写方式使很多人清楚地理解。

最佳答案

首先,person 是一个常规的 JavaScript 函数。当然,当你调用它时,行:

this.firstName = "";
this.lastName = "";

被执行。 构造函数与其说是JS语言中真正存在的东西,倒不如说是一个概念。您需要构造函数通过调用 new MyCtr() 来创建新的相似对象。同时,您需要常规函数来封装一段逻辑并使其可在不同地方重复使用,而无需复制/粘贴代码。

您可以将 JavaScript 中的所有函数用作构造函数。只需在函数调用表达式前添加 new 关键字即可。这件事改变了函数执行的上下文。如果没有 new,函数将针对 global 对象(浏览器中的 window)执行。函数内的 this 变量指的是上下文。

并非每个函数都准备好成为构造函数。通常,构造函数 使用 this 变量做一些事情,该变量是对在 new MyCtr() 调用期间创建的对象的引用。此外,构造函数从不返回值。

让我们看几个例子(您可以直接在浏览器的控制台中执行它):

function foo() {
this.a = 1;
}

foo(); // using function as a regular function. Ctx is window.
console.log(window.a); // prints "1"
foo.call(window); // explicitly specify execution ctx. The same as just foo() call

var instance = new foo(); // using foo as a constructor
console.log(instance.a); // prints "1"

// actually you can do it without new keyword
var instance = {}; // manually create new object
foo.call(instance); // manually call foo against this object
console.log(instance.a); // prints "1"

// However, the code above is not strictly equivalent to the code using new.
// It omits the concept of prototype, but it's enough for our current task.

关于函数和文件。在 Java 语言中没有这样的事情,即每个类都必须放在单独的文件中。您可以将所有函数放在一个文件中,然后将其用作构造函数或不用作构造函数。但是,最佳做法是为每个文件(称为模块)驻留一个构造函数(读作 )。

关于javascript - JavaScript 中的构造函数概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34785496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com