我在带有标志的Windows上使用 节点v0.11.14-nightly-20140819-preharmony
。
我的JavaScript对象在其原型中定义了两种方法:
function User (args) {
this.service= new Service(args);
}
User.prototype.method2 = function (response) {
console.log(this); // <= UNDEFINED!!!!
};
User.prototype.method1 = function () {
.............
this.service.serviceMethod(args)
.then(this.method2)
.catch(onRejected);
};
function onRejected(val) {
console.log(val);
}
serviceMethod
的Service
对象返回一个承诺。
当我使用User
如下对象时:
let user = new User(args);
user.method1();
this
在method2
对象的User
结束undefined
时,由被称为then
一旦承诺得到满足。
我尝试同时使用 ES6 和 Bluebird promise实现。
为什么this
最终会undefined
出现这种情况?
为什么this
最终会undefined
出现这种情况?
因为您传递的是函数,而不是方法绑定的实例。对于通用解决方案:
….then(this.method2.bind(this))… // ES5 .bind() Function method
….then((r) => this.method2(r))… // ES6 arrow function
但是,Bluebird确实提供了另一种方法来调用函数:
this.service.serviceMethod(args)
.bind(this)
.then(this.method2)
.catch(onRejected);
主要内容:1.ES6对象文字语法扩展,2.合并ES6中的对象,3.对象解构对象是键/值对的集合,可以像哈希或字典一样在对象的整个生命周期中对其进行修改。在JavaScript中使用对象可以定义自定义数据类型。 与原始数据类型不同,使用对象表示复杂或多个值。 这些值可以是对象数组或标量值,也可以是函数。对象内部的数据是无序的,值可以是任何类型。 可以使用大括号以及可选的属性列表来创建对象。 该属性是“键:值”对,其中键是字符串或属性名称,值可以是任何值。 语法 创建空对象
主要内容:1.Boolean属性,2.Boolean方法ES6 Boolean对象可以表示两个值,即或。 在JavaScript中,布尔值用作获取对象,变量,条件,表达式等值的函数,它们包括和。 如果省略参数或,负数,,,,或空()字符串,则对象具有初始值。 语法 对象有三种方法和两个属性。下面来详细的了解对象的属性和方法。 1.Boolean属性 布尔对象的两个属性列表如下: 序号 属性 说明 1. 此属性返回对象的构造函数。 2. 用于将属性和方法
主要内容:1.Number属性,2.Number方法,3.二进制,八进制和十六进制文字ES6 Number对象具有执行日期,浮点数,整数等数字功能的几种方法和属性。使用ES6中可以使用对象来实现数字的操作。 这是因为浏览器会自动将数字文字转换为类的实例。 使用构造函数创建对象。 对象的一些主要用途包括,当参数无法转换为数字时将返回:。 语法 参数说明: :这是要创建的对象的数值。如果提供非数字参数,则它将返回,因为相应的参数无法转换为数字。 1.Number属性 下面来看看ES6中
我想使用“扩展”操作符克隆对象。但是,这些方法不会复制,如图所示 我知道你可以做Object赋值(),但我正在寻找一种使用ES6语法的方法 ES6中使用扩展语法的深度复制解决方案涉及深度克隆:我只对复制方法和属性感兴趣 如何克隆javascript ES6类实例的解决方案使用Object.Assign()
问题内容: 在ES6中,这两个都是合法的: 并且,作为速记: 是否可以使用新的箭头功能?在尝试类似 要么 我收到一条错误消息,提示该方法无权访问。这仅仅是语法问题,还是您不能在ES6对象内部使用胖管道方法? 问题答案: arrow函数并非设计为在所有情况下仅作为老式函数的简化版本使用。它们不打算使用关键字替换函数语法。arrow函数最常见的用例是不重新定义的短“ lambda” ,通常在将函数作为
本文向大家介绍ES6中Math对象新增的方法实例详解,包括了ES6中Math对象新增的方法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ES6中Math对象新增的方法。分享给大家供大家参考,具体如下: Math.trunc() Math.trunc方法用于去除一个数的小数部分,返回整数部分。 对于没有部署这个方法的环境,可以用下面的代码模拟。 Math.sign() Math.s