javascript:函数和对象...?

2023-12-03

可以将函数作为对象来调用吗?例如:

function Tip(txt){      
    this.content = txt;  
    this.shown = false;  
}

And:

var tip = new Tip(elem.attr('title'));

我的问题:

  1. 你可以打电话吗new对于函数来说,对于对象来说呢?
  2. 使用“this”成为可能,因为我们use那个函数作为一个对象?

您正在寻找constructor概念。

JavaScript 中的所有函数是对象并可用于创建对象:

function make_person(firstname, lastname, age) {
    person = {};
    person.firstname = firstname;
    person.lastname = lastname;
    person.age = age;
    return person;
}
make_person("Joe", "Smith", 23);
// {firstname: "Joe", lastname: "Smith", age: 23}

但是,为了创建特定类型的新对象(也就是说,继承原型、具有构造函数等),函数可以引用this and 如果它被调用new操作员那么它将返回一个对象,其中包含定义的所有属性this在函数中 -this在这种情况下,引用我们正在创建的新对象。

function make_person_object(firstname, lastname, age) {
    this.firstname = firstname;
    this.lastname = lastname;
    this.age = age;
    // Note, we did not include a return statement
}

之间需要注意的主要区别make_person and make_person_object是那个呼唤吗new make_person()(而不是简单地make_person()) 不会做任何不同的事情...两者都会产生相同的对象。呼唤make_person_object()没有new然而,运算符将定义您的this当前的属性this对象(一般window如果您在浏览器中操作。)

Thus:

var Joe = make_person_object("Joe", "Smith", 23);
console.log(Joe); // undefined
console.log(window.firstname) // "Joe" (oops)

var John = new make_person_object("John", "Smith", 45);
console.log(John); // {firstname: "John", lastname: "Smith", age: 45}

另外,正如 @RobG 指出的,这种做事方式创建了对prototype的财产make_person_object我们创造的每个“人”。这使我们能够在事后向人员添加方法和属性:

 // Assuming all that came before
make_person_object.prototype.full_name = "N/A";
make_person_object.prototype.greet = function(){ 
    console.log("Hello! I'm", this.full_name, "Call me", this.firstname); 
};
John.full_name // "N/A"
John.full_name = "John Smith"; 
make_person_object.full_name // Still "N/A"
John.greet(); // "Hello! I'm John Smith Call me John"

按照惯例,构造函数的功能如下make_person_object是大写的、单数的和“名词的”(因为缺乏更好的术语)——因此我们会有一个Person构造函数,而不是make_person_object这可能会被误认为是普通函数。

也可以看看:

  • The new操作员
  • 鲍宾斯很棒JavaScript 子类化简介(两者都与and没有原型继承。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript:函数和对象...? 的相关文章

随机推荐

  • Android 中如何获取联系人的所有详细信息

    给定一个联系人 ID 我可以通过对每个字段进行不同的查询来获取各种联系详细信息 如姓名 电话 电子邮件 ID 等 但是是否有一种方法可以通过进行单个查询来获取与此联系人 ID 相关的所有详细信息 必须更改一些教程内容提供商由于它引用了已弃用
  • 省略双引号在 PostgreSQL 上进行查询

    简单的问题 有没有办法在PostgreSQL中省略双引号 这是一个例子 给出select from A 我会检索ERROR relation a does not exist 我必须给select from A 得到真正的结果 有没有办法在
  • 如何将 Unity3D 5 Windows 应用程序打包到单个 exe 文件中?

    我是Unity3d开发的新手 我创建了两个版本的 3D 拼图应用程序 一个用于 Mac 另一个用于 Windows Mac 应用程序是使用其中包含的包内容创建的 Windows应用程序是使用exe文件和一个单独的数据文件夹创建的 该数据文件
  • 在 Java 中切换布尔变量的最简洁方法?

    在 Java 中是否有比简单的 if else 更好的方法来否定布尔值 if theBoolean theBoolean false else theBoolean true theBoolean theBoolean
  • 如何使用LiveData实现zip功能

    我正在使用两个 LiveData 从我的服务器获取数据 并希望在两个 LiveData 完成后得到结果 LiveData live1 LiveData live2 MutableLiveData live3 live1 observe th
  • R dplyr 根据多个选定列的条件过滤行

    我有一个数据框DF 我想根据几个选定列的条件对其进行过滤 例如 我想过滤 DF 中满足该行包含任何值的条件的行小于0 03在列中PCS AB PCS AD PCS BD DF lt cbind data frame A c 100 10 1
  • 如何在 tkinter 中创建半透明窗口?

    I am trying to create a translucent window in Tkinter like the one in windows 11 这个怎么做 如果我们不能做到这一点 我们可以捕获屏幕的一部分并使用 cv2 对
  • CORS 预检通道中的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌

    后端返回 Access Control Allow Headers 我有一个请求 例如 fetch url here headers X Auth token 它可以在 Chrome 中运行 但对于 Firefox 我得到 跨源请求被阻止
  • AttributeError:'str'对象在pytorch中没有属性'dim'

    将模型预测发送到模型时 我在 PyTorch 中得到以下错误输出 有谁知道发生了什么事吗 以下是我创建的架构模型 在错误输出中 它显示问题存在于 x self fc1 cls hs 行中 class BERT Arch nn Module
  • 使用意图过滤器启动时 Xamarin.Android mvvmcross 应用程序崩溃

    通过链接打开 Android 应用程序时 Android 应用程序崩溃 并显示NullReferenceExcetpion The NRE发生在base OnCreate bundle 方法 底座类型为MvxFragmentCompatAc
  • 如何根据屏幕分辨率动态设置fxml中的首选宽度和高度javafx

    我是javafx新手 是否可以根据屏幕分辨率在 fxml 文件中动态设置首选宽度和高度 我知道如何获取屏幕分辨率并将其设置为舞台 Screen screen Screen getPrimary Rectangle2D bounds scre
  • 解释 CorFlags 标志

    我该如何解释CorFlags标志以及如何使用它来确定 NET 程序集是为 x86 还是 x64 构建的 会不会是下面这个 corflags MyAssembly dll 微软 NET 4 5引入了一个新选项 任何 CPU 32 位首选 在新
  • MySQL 期初期末余额及日期范围

    我有一张桌子transactions在我的 MySQL 数据库中 有 50K 条记录 数据如下所示 trx date bill due 2020 03 01 100 00 10 00 2020 03 02 50 00 20 00 2020
  • 向文本文件 php 中的每一行添加一个字符

    我是新手 我有一个文本文件 文本文件的内容如下 text1 text4 text7 text2 text5 text8 text3 text6 text9 我想做的是添加这个 gt gt gt 使用以下命令将字符添加到文本文件前两垂直列中的
  • 如何修复使用 TreeNode.MoveTo 时 TTreeView 的错误?

    使用 TreeNode MoveTo 方法有时无法正常工作并引发 访问冲突 异常 大多数时候有效 有时无效 大多数情况下 COMCTL32 DLL 模块中存在访问冲突 读取地址 FEEEFEFA 并导致程序崩溃 冻结 这是我的代码 proc
  • 右侧 singleton.getinstance() 分配需要 CodeModel 帮助

    我已经能够使用 CodeModel API 生成 99 的所需内容 但我被难住了 使用各种 directXX 方法不会将导入语句添加到生成的代码中 并且除了生成的类中的一处之外 我可以在没有 directXXX 类型的方法的情况下工作 假设
  • 如何在 C++ 中初始化 3D 数组

    如何在 C 中初始化 3d 数组 int min 1 1 1 100 100 100 this is not the way 您问题中的数组只有一个元素 因此您只需要一个值即可完全初始化它 您需要三组大括号 一组用于数组的每个维度 int
  • 如何在 msHTML 中调用脚本工作

    我正在使用 axWebBrowser 我需要编写一个脚本 该脚本在列表框的选定项目更改时起作用 在默认的 webBrowser 控件中有一个类似的方法 WebBrowserEx1 Document InvokeScript script 但
  • AngularJs 使用 $scope 变量作为 URL 嵌入 MS Word 文档

    如果我对 URL 进行硬编码 则可以嵌入我在互联网上找到的随机 MS Word Word 文档 但是 我想通过AJAX获取URL 所以我将HTML更改为 但即使是硬编码 scope我的 JS 中的变量 sco
  • javascript:函数和对象...?

    可以将函数作为对象来调用吗 例如 function Tip txt this content txt this shown false And var tip new Tip elem attr title 我的问题 你可以打电话吗new对