相关疑难解决方法(0)

如何在JavaScript中创建自定义错误?

出于某种原因,看起来构造函数委派在以下代码段中不起作用:

function NotImplementedError() { 
  Error.apply(this, arguments); 
}
NotImplementedError.prototype = new Error();

var nie = new NotImplementedError("some message");
console.log("The message is: '"+nie.message+"'")
Run Code Online (Sandbox Code Playgroud)

运行这个给出The message is: ''.有关为什么,或者是否有更好的方法来创建新Error子类的任何想法?是否存在我不知道apply的本机构Error造函数的问题?

javascript exception

200
推荐指数
10
解决办法
13万
查看次数

使用ES6语法和Babel扩展Javascript中的错误

我试图用ES6和Babel扩展Error.它没有成功.

class MyError extends Error {
  constructor(m) {
    super(m);
  }
}

var error = new Error("ll");
var myerror = new MyError("ll");
console.log(error.message) //shows up correctly
console.log(myerror.message) //shows empty string
Run Code Online (Sandbox Code Playgroud)

Error对象永远不会获得正确的消息集.

试试Babel REPL.

现在我已经在SO上看到了一些解决方案(例如这里),但它们看起来都非常非ES6-y.如何以漂亮的ES6方式做到这一点?(那是在Babel工作)

javascript transpiler ecmascript-6 babeljs

128
推荐指数
6
解决办法
5万
查看次数

如何获取JavaScript调用者函数行号?如何获取JavaScript调用者源URL?

我使用以下内容来获取JavaScript调用者函数名称:

var callerFunc = arguments.callee.caller.toString();
callerFuncName = (callerFunc.substring(callerFunc.indexOf("function") + 8, callerFunc.indexOf("(")) || "anoynmous")
Run Code Online (Sandbox Code Playgroud)

有没有办法发现调用该方法的行号?

另外,有没有办法获取调用该方法的JavaScript文件的名称?还是源URL?

javascript

103
推荐指数
5
解决办法
11万
查看次数

是否可以获取对象的不可枚举的继承属性名称?

在JavaScript中,我们有几种获取对象属性的方法,具体取决于我们想要获得的内容.

1)Object.keys(),它返回一个对象的所有自己的可枚举属性,一个ECMA5方法.

2)一个for...in循环,它返回一个对象的所有可枚举属性,无论它们是自己的属性,还是从原型链继承.

3)Object.getOwnPropertyNames(obj)返回对象的所有属性,可枚举与否.

我们也有这样的方法hasOwnProperty(prop)让我们检查属性是继承还是实际属于该对象,propertyIsEnumerable(prop)顾名思义,它让我们检查属性是否可枚举.

有了所有这些选项,就无法获得对象的不可枚举的非自有属性,这就是我想要做的.有没有办法做到这一点?换句话说,我可以以某种方式获取继承的非可枚举属性的列表吗?

谢谢.

javascript oop properties object

90
推荐指数
4
解决办法
2万
查看次数

自定义错误和蓝鸟捕获ErrorClass会导致无意中的行为

我正在尝试为自定义错误实现一个模块.

应该可以使用此模块在app的require-statement中实例化单个错误:

var MyCustomError = require('custom-error')('MyCustomError');
Run Code Online (Sandbox Code Playgroud)

这是模块:

'use strict';

var _CACHE = {};

function initError(name) {
  function CustomError(message) {
    this.name = name;
    this.message = message;
  }
  CustomError.prototype = Object.create(Error.prototype);
  CustomError.prototype.constructor = CustomError;
  _CACHE[name] = CustomError;
}

function createCustomError(name) {
  if (!_CACHE[name]) {
    initError(name);
  }
  return _CACHE[name];
}

module.exports = createCustomError;
Run Code Online (Sandbox Code Playgroud)

到目前为止,上面的要求一线工作正在进行中.

现在,在我的服务中,我想明确地捕获这个错误:

var MyCustomError = require('custom-error')('MyCustomError')
// ...
return fooService.bar()
    .catch(MyCustomError, function (error) {
      logger.warn(error);
      throw error;
    })
Run Code Online (Sandbox Code Playgroud)

如果我在测试中通过抛出MyCustomError来拒绝fooService.bar的承诺,那么这很有用.

但是,这只能起作用,因为我的测试和服务使用了相同的MyCustomError 实例.

例如,如果我删除了我的自定义错误模块中的缓存机制,则不会再达到/执行catch,因为bluebird不理解这两个错误的类型相同:

function createCustomError(name) {
  //if (!_CACHE[name]) …
Run Code Online (Sandbox Code Playgroud)

javascript error-handling prototype node.js bluebird

8
推荐指数
1
解决办法
718
查看次数

扩展JavaScript错误/异常

我正在开发一个小型JS库,并在那里使用自定义错误异常.

那么,我决定以这种方式从本机Javascript Error对象继承它们(ORLY?):

var MyError = function(){
    Error.prototype.constructor.apply(this, arguments);
};

// Inherit without instantiating Error
var Surrogate = function(){};
Surrogate.prototype = Error.prototype;
MyError.prototype = new Surrogate();

// Add some original methods
MyError.prototype.uniqueMethod = function(){...}
Run Code Online (Sandbox Code Playgroud)

看起来像平常的继承..但是!

var err = new MyError("hello! this is text!");
console.log(err.message); // is giving me empty string!
Run Code Online (Sandbox Code Playgroud)

我已经在这里MDN上阅读了有关此内容的文章,但所有人都说我要使用这样的东西:

var MyError = function(msg){
    this.message = msg;
};
Run Code Online (Sandbox Code Playgroud)

但我的问题是 - 如果不是在Error的构造函数中,那么消息初始化的地方?可能有人知道Error本机构造函数是如何工作的?

谢谢!

PS如果它有趣 - 我正在开发Enum.js库.

javascript inheritance native exception

6
推荐指数
1
解决办法
579
查看次数