- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在我的一个问题中,我得到了以下代码作为答案之一。我对语言的理解现在已经好得多了,只有一个小问题。
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/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 10年前关闭。 Improve this qu
我正在开发一个 Android 应用程序。在此应用程序中, Logo 栏显示在所有页面( Activity )上,或者我们可以说它在所有页面上都有标题。这个 Logo 栏有几个图标,如主页、登录、通知
我正在使用 hadoop 使用开源接口(interface) HVPI 处理视频。然而,inputsplit 的实现,更准确地说是在 isSplitableobContext (context, Pa
1. 是什么? MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System
有没有办法使用 c++20s 的概念来检查一个值是否满足某些要求? 假设我正在编写某种使用分页的容器,并且我想让页面大小成为模板参数。 template class container; 我可以使用带
如何在 ArrayList 中循环遍历 ArrayList? 例如,如果我有一个名为 Plants of Plant 对象的 ArrayList。每个 Plant 对象内部都有一个随机数量的花名。我如
如何在UML类图中绘制C++概念? 具体来说,我有以下代码: template concept Printable = requires(T a, std::ostream &where) {
我有兴趣制作一个网站,在访问者访问时闪现整个网络历史记录。我计划使用 JavaScript 来获取每个观看者计算机上的历史记录,并根据他们拥有的内容以不同的速度对其进行动画处理。我的想法是使用 his
有一个模板定义,例如: template void foo( void ) { /* ... */ } 如何定义一个概念,以便N必须为非零正值(N> = 1)? 就像是: template con
封装是信息隐藏还是导致信息隐藏? 正如我们所说,封装将数据和函数绑定(bind)在单个实体中,因此它为我们提供了对数据流的控制,并且我们只能通过一些定义良好的函数来访问实体的数据。因此,当我们说封装导
下面有一个简单的代码片段,它使用以下方式进行编译: g++-9 -std=c++2a -fconcepts 这是试图定义一个需要存在函数的概念。我希望输出是"is",但事实并非如此……知道为什么吗?谢
我有一个普通二元运算符的概念 template concept is_binary_operation = requires (const T& t1, const T& t2) // e.g
我正在c++ 20中实现具有启发式功能的搜索算法。 我试图用类似这样的概念来约束我的算法可以使用的功能: template concept Heuristic = requires(SelfType
我需要了解 SAS 如何读取/执行数据步骤。当我查找有关 SAS 如何读取数据步骤的信息时,我似乎只找到有关它如何读取以进行合并的信息,我不了解与常规数据步骤相关的信息。比方说,我有这行代码: dat
最近我看到一个关于“框架”的问题,如果“框架”有不同的类型或概念。那么,存在不同“类型”的“框架”吗? 例如:NodeJS 是一种“类型”(概念),而 Hibernate ORM 是另一种“类型”(概
如何使用任何技术禁用或清除客户端浏览器 Cookie 我认为使用 javascript 可以用于任何技术 最佳答案 var cookies = document.cookie.split(";");
我正在使用 target = "_blank" 单击链接时生成新选项卡。但是,浏览器会将焦点移至该选项卡。 有没有办法让焦点保持在当前标签页上? 回答摘要 基本上,只需发送一个模拟控件点击的当前事件。
我正在尝试在我的 android/firebase(cloud firestore) 应用程序上添加一项需要其他用户批准/拒绝的功能。例如,当 Air&BnB 上的用户想要预订一个地方时,所有者必须批
这个问题在这里已经有了答案: mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc... expec
public class MyClass { public static void main(String[] args) { System.out.println("Hell
我是一名优秀的程序员,十分优秀!