通过引用调用原型函数时,类失去“this”范围

2024-04-28

谁能向我解释为什么“b”返回未定义以及如何解决这个问题?当我通过引用调用原型函数时,为什么“this”范围会丢失?

MyClass = function(test) {
this.test = test;
}

MyClass.prototype.myfunc = function() {       
   return this.test;
}

var a = new MyClass('asd').myfunc();
var b = new MyClass('asd').myfunc;

// Returns "asd" correctly
console.log(a)

// Returns undefined??
console.log(b())

=== 编辑/解决方案 ===

正如 plalx 所写,在我的例子中,正确的解决方案是使用 .bind()。所以结果看起来像这样:

MyClass = function(test) {
    this.test = test;
}

MyClass.prototype.myfunc = function() {       
   return this.test;
}

var a = new MyClass('asd').myfunc();
var b = new MyClass('asd'),
    bfunc = b.myfunc.bind(b)

// Returns "asd" correctly
console.log(a)

// Also returns "asd" correctly!
console.log(bfunc())

如果您想要这种行为,您需要显式绑定 this 值。

var c = new MyClass('asd'),
    b = c.myfunc.bind(c);


console.log(b());

默认情况下,this将指向leftSide.ofTheDot();在调用中,或者简单地调用该函数的对象.

注:打电话b();是相同的window.b();.

将每个函数绑定到对象实例是可能的,但效率相当低,因为函数将不再在实例之间共享。

E.g.

function MyClass(someVal) {
    var me = this;

    me.someVal = someVal;

    me.someFn = function () {
        return me.someVal;
    };
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过引用调用原型函数时,类失去“this”范围 的相关文章

  • 如何以 JavaScript 编程方式获取旋转的 svg 文本边界

    我正在动态渲染 SVG 图像并创建旋转文本 如果旋转的文本与其他文本重叠 我需要删除该文本 但我无法测量旋转的文本来创建边界并检查下一个标签文本区域 我创建了 3 个 SVG 元素来解释 SVG 1 显示重叠的文本 SVG 2 显示重叠的旋
  • 访问 .js 文件中的 Nuxt 插件

    假设我有一个脚本文件 foo js function doStuff how to access store and other plugins here export default doStuff 如果不将调用组件作为参数传递 我如何访
  • ExtJS 4 用于选择所选值的组合框事件

    由于某种原因 我需要知道用户何时从组合框中选择了值 即使它已经被选择 仅当用户选择未选择的项目时 选择 事件才起作用 我在组合框或选择器的文档中没有看到任何类似 itemclick 的事件 有任何想法吗 ComboBox uses 绑定列表
  • HTML5 游戏到本机应用程序 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在用 HTML5 制作游戏 我最熟悉 HTML5 并且比 C 等更高级的语言更喜欢它 HTML5
  • 无法读取未定义错误的属性“匹配”

    我试图在 React JS 前端显示一些文本来代替个人资料图像 当它不可用时 基本上 我将当前客户名称传递给一个函数 该函数提取名称中所有单词的第一个字符 我能够仅显示名称 但是当我执行函数调用时 出现 无法读取未定义的属性 匹配 错误 并
  • 执行oauth时如何创建弹出窗口?

    我想通过使用弹出窗口来完成 Lifestream 和其他网站使用 oauth 身份验证所做的事情 他们打开一个弹出窗口 不知何故没有被弹出窗口拦截器阻止 并将他们的网站变灰 然后 在允许 oauth 访问时 它会说重定向回原始站点并终止弹出
  • 如何在Android上获取角度中的按键事件?

    我们如何在 Android 上的 Angular 中获取按键事件及其值 我使用phonegap Cordova Angular JS
  • 从 json 文件加入时添加角色 (autorole)

    我对 JS 相当陌生 为了学习 我决定为 Discord 制作一个机器人 我学到了很多并且正在继续学习 我有一个 autorole 的想法 我知道传统的做法 bot on guildMemberAdd member gt var role
  • 如何处理 React JSX 中的长类名?

    假设我在 React JSX 中渲染这个组件 render return h1 Some text h1 这些类触发我的 JS linter 的行太长 而且很难阅读 怎样才能分开长className将 React 组件中的属性分成多行而不破
  • JavaScript 中的凯撒密码

    我正在尝试编写一个程序来解决javascript中的以下问题 写在本段下面 我不知道为什么我的代码不起作用 有人可以帮助我吗 我是 JavaScript 新手 这是一个免费的代码训练营问题 现代常见的用法是 ROT13 密码 其中字母的值移
  • 在 Jest 测试中设置时刻时区

    我有 util 函数 它以特定的日期格式解析给定的日期 即 2019 01 28 然后使用momentJS检索当天的开始并将其转换为 ISO 日期格式 dates js import moment from moment export co
  • Firestore——仅获取大型同步集合中已更改的文档

    我已阅读下面的所有问题 但在文档中找不到任何内容来描述如何同步集合和接收only更改集合中的文档 我的同步集合中有超过 500 个文档 使用redux saga firebase 同步集合 https redux saga firebase
  • 查找 JavaScript 中函数参数的数量[重复]

    这个问题在这里已经有答案了 可能的重复 获取函数的元数 https stackoverflow com questions 4848149 get a functions arity 假设我有 function a x function b
  • 原型链、构造函数、继承

    我正在玩 javascript 原型 我是新手 所以我有一个小问题 我正在用这个article http mckoss com jscript object htm作为指导 我已经定义了产品和书籍 目的是什么Book prototype c
  • jQuery 更改为隐藏字段后触发重力表单中的表单更新

    简而言之 是否有 JavaScript 函数或挂钩来触发重力形式的更新 以便执行条件逻辑 原问题 我正在使用重力形式 并且创建了一个 变化时 事件 gform 1 find gfield date dropdown month select
  • 用空字符串替换状态:Javascript

    我有这个网址 website com con blog true 我在 javascript 中所做的是 if getURLparams blog RandomFunction change the url window history r
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 更改哈希值而不触发 hashchange 事件

    我使用哈希来动态加载内容 为了使后退按钮正常工作 我正在捕获哈希更改 然而 有时我需要更改哈希值而不触发哈希更改函数 例如 当页面重定向到服务器端时 我需要在内容返回后更新哈希值 我想出的最佳解决方案是取消绑定 hashchange 事件
  • Nodejs 解码 base64 并使用流将它们保存到文件中

    在我的node js应用程序中 我使用以下代码行解码base64编码的图像 const fileDataDecoded Buffer from base64EncodedfileData base64 到目前为止 我可以使用以下代码编写一个
  • 将数组数组的字符串转换为 Javascript 数组数组的优雅方法?

    我有一个 ajax 请求 它返回一个值列表 如下所示 5 5 5 6 15 15 7 13 12 我需要它是一个带有数字的 javascript 数组 5 5 5 6 15 15 7 13 12 我尝试将 和 替换为 然后用 分割和 for

随机推荐

  • 让 Akka.NET 连接到远程地址

    我发现的所有演示如何开始在 Akka NET 中进行远程处理都演示了最简单的用例 其中两个参与者使用 localhost 在同一台计算机上运行 我试图让 Akka NET actor 连接到远程计算机 但遇到了一些困难 代码非常简单 客户端
  • AngularJS从base64生成二进制数据图像并作为图像文件发送到服务器

    我正在使用这个工具在我的 AngularJS 应用程序中裁剪图像 https github com fengyuanchen cropper https github com fengyuanchen cropper 然后我尝试将数据存储到
  • 硒找不到元素

    我在访问元素时遇到问题 fieldset legend Legend1 legend table width 100 quot cellspacing 3 tbody tr tr tr tr tbody table fieldset leg
  • T-sql:获取列的总和

    我有一张如下所示的表 W1 W2 w3 Gold 10 2 3 Silver 3 1 1 但我需要一个结果 W1 W2 w3 Gold 10 12 15 Silver 3 4 5 有什么方法可以得到这个结果吗 Mysql查询 SELECT
  • 如何让 CopyFileEx 报告回来以便我可以取消文件复制操作?

    我正在尝试使用FileUtilities CopyFile包装纸CopyFileEx from here http msdn microsoft com en us magazine cc163851 aspx 但是CopyFileCall
  • 添加新列后如何使用 activeandroid 更新表

    感谢您的阅读和帮助 我正在使用 ActiveAndroid 3 0 Android 2 2 在我的应用程序中 我有一个名为 用户 的模型 最初 我只使用 id 名称 密码 列 属性创建模型 我在模拟器上运行该应用程序 并且它有效 Table
  • 各种 Python 实现的优缺点是什么?

    我对 Python 比较陌生 并且一直使用标准的 cpython v2 5 实现 不过 我一直想知道其他实现 特别是 Jython 和 IronPython 是什么让他们变得更好 是什么让他们变得更糟 还有哪些其他实现 我想我正在寻找的是每
  • 如何在执行 apache HttpPost 时将 UrlEncodedFormEntity 中的空格编码为 %20?

    我正在访问的网络服务需要 URLEncodedFormEntity 形式的参数 我无法根据 Web 服务的要求将空间更改为 20 而是将空间转换为 我的代码是 HttpClient client new DefaultHttpClient
  • 如何调用在 useEffect 中返回值的自定义钩子?

    我有一个自定义钩子 它通过它获取的参数返回一个对象 我需要使用任何更新的参数重新创建它 所以我需要在内部执行此操作useEffect但我无法调用 useEffect 中的钩子 知道如何实施吗 自定义钩子 useBuilder tsx exp
  • 有没有人有一段 PHP 代码来抓取字符串中的第一个“句子”?

    如果我有这样的描述 我们更喜欢可以回答的问题 而不仅仅是讨论 提供详细信息 写得清晰简单 我想要的只是 我们更喜欢可以回答的问题 而不仅仅是讨论 我想我会搜索一个正则表达式 比如 确定strpos 然后从主字符串中执行一个substr 但我
  • Ada 的命令行参数

    我正在编写一个 Ada 程序 该程序应该对字母字符进行大小写转换 该程序使用 1 2 或 3 个命令行参数 我几乎已经把事情写下来了 但我不知道如何进行论证 命令行参数是 单个字符指定是否要进行大写转换或小写转换 应用于输入 U 或 u 表
  • 如何用 numpy 在 Cython 中表示 inf 或 -inf ?

    我正在用 cython 逐个元素构建一个数组 我想存储常量np inf or 1 np inf 在某些条目中 然而 这将需要返回 Python 进行查找的开销inf 有没有libc math相当于这个常数 或者其他一些可以轻松使用的值 相当
  • C 语言的计算单元转换器

    我正在学习 C 并且编写了一个简单的程序 只是晒黑 输入时 您传递两个参数 行和列 输出时您会获得该单元格的 Calc 或 Excel 代码 例如 Input 3 1 Output A3 Input 1 27 Output AA1 代码 i
  • UIButton 数组或 UIButton 方法(名为:“\(string)”)

    是否可以制作一个数组UIButtons let buttonArray UIButton UIButton Button1 UIButton Button2 UIButton Button3 稍后参考为 buttonArray 0 setI
  • 我可以删除 TabControl 上选项卡上的虚线焦点矩形吗?

    我有一个选项卡控件 需要删除所选选项卡周围的虚线焦点矩形 我已将 TabControl 的 TabStop 属性设置为 false 但是 如果我单击一个选项卡并按Tab键 选项卡名称周围出现虚线矩形 我尝试过创建自己的TabControl并
  • 运行用户数据脚本 AWS EC2 时出现问题

    是否可以通过 AWSCLI 用户数据 运行 python 脚本 我尝试过 但它没有运行 我的日志中有以下内容 boot log 2015 08 07 10 08 30 660 init py WARNING Unhandled non mu
  • 在 silverlight 中播放视频?

    如何使用 silverlight 播放视频 Visual Studio 是否内置了视频播放器组件 或者我需要制作一个视频播放器 通常情况下 这取决于您的要求 您可以使用Silverlight自带的媒体元素 msdn信息在这里 http ms
  • 如何检测两个同时触摸?

    Windows Phone 8 中的触摸检测利用了 System Windows Input Touch FrameReported 事件 该事件是开发人员可用的最原始且响应速度最快的触摸事件 您可以像这样使用该事件 public Main
  • 如何保证主机应用程序和扩展程序使用的共享应用程序容器中的核心数据存储中的唯一条目?

    为了有效地提出我的问题 让我们首先考虑一下我面临的具体场景 常规设置 一个主机 iOS 8 应用程序 与主机应用程序捆绑在一起的一个或多个 iOS 8 扩展 WatchKit Share 等 主机应用程序和所有扩展在共享应用程序组容器中共享
  • 通过引用调用原型函数时,类失去“this”范围

    谁能向我解释为什么 b 返回未定义以及如何解决这个问题 当我通过引用调用原型函数时 为什么 this 范围会丢失 MyClass function test this test test MyClass prototype myfunc f