JS-无法获取函数实例的构造方法名称

qwertytrewq

我有bar一个function(foo的instance(),但是bar.constructor.name返回"Object"而不是"foo"谁能告诉我我做错了什么?

代码:

function foo(text){
    this.text = text;
}

foo.prototype = {
   getUppercase: function(){
      return this.text.toUpperCase();
    }
}

var bar = new foo("bar");
console.log(bar.constructor.name); //logs "Object" in Chrome
TJ人群

当您对象替换为函数的prototype属性时,您必须负责constructor在其上修复该属性:

foo.prototype = {
  constructor: foo,                  // <====
  getUppercase: function() {
    return this.text.toUpperCase();
  }
};

这不是自动的。prototype最初创建函数时,该属性的唯一自动填充位于分配给函数属性的默认对象上

function foo(text){
    this.text = text;
}

foo.prototype = {
  constructor: foo,
  getUppercase: function() {
    return this.text.toUpperCase();
  }
};

var bar = new foo("bar");
console.log(bar.constructor.name);

或者,不要替换上的默认对象prototype,只需增加它即可(通常是我的偏好):

foo.prototype.getUppercase = function() {
    return this.text.toUpperCase();
};

您可以通过Object.definePropertiesObject.assign(后者可能需要垫片)或自己的实用程序功能执行多个操作。


最后,如果我不注意以下几点,我会很失落:

  1. 绝大多数情况下,构造函数名称在JavaScript中以大写字母开头。只是一个约定,但它是一个非常,非常完善的惯例。

  2. 在ES2015 +中,您可以使用class更简洁的版本:

  3. Function#name 是ES2015的新功能,在我于2016年7月撰写本文时,支持有点粗略。(Chrome 51+确实有此功能。)

FWIW:

class Foo {
    constructor(text) {
        this.text = text;
    }

    getUppercase(){
        return this.text.toUpperCase();
    }
}

var bar = new Foo("bar");
console.log(bar.constructor.name);

当然,如果您需要支持较旧的引擎(例如IE11),则需要进行翻译...(但是再次,如果您使用Function#name,那也来自ES2015。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

js获取构造函数名称链

来自分类Dev

由于StackTrace构造函数和获取方法名称而对性能造成的影响

来自分类Dev

使用Webpack和Babel在JS中按名称获取构造函数

来自分类Dev

JS Promises / A +的'catch'方法名称是否无效,因为它是JS关键字?

来自分类Dev

方法名称不是函数

来自分类Dev

登录-获取方法名称

来自分类Dev

Node.js TypeError:不是构造函数-在单独的类方法中实例化一个类

来自分类Dev

如何在Vue.js中的变量中传递方法名称

来自分类Dev

vue.js中v-for元素中的动态插值计算方法名称

来自分类Dev

Node.js从实例获取模块名称

来自分类Dev

给定方法名称为字符串,如何获取方法实例?

来自分类Dev

如何在构造函数(JS)中获取构造函数的父级

来自分类Dev

JS OOP:原型方法与构造函数中的方法

来自分类Dev

codeigniter从父方法获取方法名称

来自分类Dev

Arduino方法名称与库函数冲突

来自分类Dev

junit,获取失败的方法名称

来自分类Dev

获取Web服务的方法名称

来自分类Dev

如何获取模型的方法名称数组?

来自分类Dev

获取当前方法名称

来自分类Dev

获取引发异常的方法名称

来自分类Dev

smalltalk反射-如何获取方法名称?

来自分类Dev

如何获取Swagger API JS函数名称?

来自分类Dev

如何获取表示JS中函数的属性名称

来自分类Dev

在render方法中访问构造函数变量-React.js

来自分类Dev

JS扩展构造函数类

来自分类Dev

Angular js:无法获取rest方法的响应

来自分类Dev

构造函数无法实例化

来自分类Dev

获取内置函数的方法名称,该名称作为参数传递并在函数体内调用

来自分类Dev

JS:如何将项目添加到从构造函数实例化的新 Objects 数组中?

Related 相关文章

热门标签

归档