Typescript 和 __proto__ 属性

2024-01-16

因此,每次提到 __proto__ 后通常都会提到 Brendan Eich 请求不要使用它。我一直在使用 Typescript 进行一些反射,使用它将类的原型链导航到提供的祖先类,并且希望注入保存类元数据的单个原型属性。

有谁知道我可能产生的性能开销的具体情况,或者不依赖 __proto__ 的解决方案?

编辑-用代码更新。这只是我输入的一个人为示例,但它说明了我希望做什么。我不太确定如何对 __proto__ 突变引起的感知放缓进行基准测试。但无论如何我还是尝试了一下。实例化、原型属性访问和方法调用的执行方式在修改后没有任何不同。

class Base {
    public getClassName() : string {
        return this['_className'] || undefined;
    }
}

class Intermediate extends Base {   
}

class Final extends Intermediate {  
}

function traverseProtoChain(derivedClass, baseClass) {
    var cursor = derivedClass.prototype;
    while (cursor instanceof baseClass) {
        if (isDefined(cursor.constructor)) {
            var className = getProtoName(cursor);
            if (isValidString(className)) 
                cursor['_className'] = getProtoName(cursor);
        }           

        if (isDefined(cursor.__proto__)) {
            cursor = cursor.__proto__;
        }   
    }   
}

您可以使用 ECMAScript 5.1 标准:

Object.getPrototypeOf(cursor)

对于非常旧版本的浏览器,您可以尝试回退到__proto__ if Object.getPrototypeOf不存在,但您可以根据您的特定上下文决定这些浏览器是否重要。

这是一个说明这一点的示例。bar.prototype不起作用,因为它是一个实例。getPrototypeOf有效并给你与灰心丧气的人相同的答案__proto__.

class Foo {
    constructor(name: string) {

    }
}

class Bar extends Foo {

}

var bar = new Bar('x');

console.log(bar.prototype);
console.log(Object.getPrototypeOf(bar));
console.log(bar.__proto__);

所以你可以写“取悦所有人”......

if (Object.getPrototypeOf) {
    console.log(Object.getPrototypeOf(bar));
} else if (bar.__proto__) {
    console.log(bar.__proto__);
}

最后的弧线球...__proto__很可能在 ECMAScript 6 中成为标准化...值得牢记!

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

Typescript 和 __proto__ 属性 的相关文章

随机推荐

  • Tomcat:查找目录时不附加尾随“/”

    我在 Tomcat 7 0 22 Java 1 6 MacOS Lion 中部署了 war 存档 战争称为 myapp war 因此 Tomcat 正在服务http localhost myapp http localhost myapp
  • 程序运行时间

    我如何 从程序 我的意思是在我这次要打印 最终返回 之前 找出我的程序运行的时间 提前致谢 edited 非常感谢您的所有回答 但我的程序很短 有没有其他方法可以找出微秒或纳秒的时间 因为使用下面的方法我收到 0 当程序启动时 你会这样做
  • 表单模型绑定 laravel 5.1 多个模型

    我想要 Laracollective 的 Form 包中的多个对象的 Form 模型绑定 如下所示 Form model user vendors array route gt array user update user gt id 我可
  • 为什么主键会自动创建聚集索引

    当我在oracle表中创建主键时 为什么它默认创建 聚集 索引 创建主键时自动创建聚集索引的原因是什么 难道Oracle设计者这样设计Oracle只是他的喜好吗 Oracle 将创建一个索引来管理没有预先存在的索引适用的唯一约束 如果没有索
  • Android - 以编程方式检查开发人员选项?

    我有一个使用意图用相机拍摄照片的应用程序 但最近我遇到了使用 后台进程限制 等开发人员选项的用户遇到的问题 他们关闭了所有后台应用程序 所以除了调用 onPause 和 onResume 之外 我的应用程序也被杀死了 我希望是否有可能检查此
  • SqlServer处于脚本升级模式

    Vista 刚刚完成了众多更新之一 重新启动计算机后 我尝试使用 Sql Server Management Studio 连接到 Sql Server 2008 实例 但收到此错误 连接到 MSSQLSERVER2008 时出错 附加信息
  • 使用 Jabber 发送网络消息

    也问过服务器故障 https serverfault com questions 19586 using jabber to send network messages 我也被建议将其发布在这里 我们需要在其他用户在线提交报告内容时通过网络
  • 如何在 TcxExtLookupComboBox 中使用 TcxCustomDataSource?

    我使用 Devexpress 的 TcxExtLookupComboBox 并尝试实现自定义数据源 我已经像这样设置了自定义数据源 procedure TMainForm FormCreate Sender TObject begin fD
  • 使用 R 将数据从 PDF 导入到 HTML

    有没有办法使用 R 将数据从 pdf 文件导入为 HTML 格式 我尝试使用以下代码 library tm filename file pdf doc lt readPDF control list text layout elem lis
  • Android NFC <技术列表> - 问题

    我想在 Android 上编写我的第一个 NFC 应用程序 为此 我使用 Android 开发人员链接 http developer android com guide topics nfc index html http develope
  • 如何将 FlowDocument 添加到 StackPanel?

    我创建了以下内容class为了有一个easy way显示格式化的WPF 文档中的文本 然而这个解决方案返回一个流程文件 我遇到了麻烦整合我当前应用程序中的这个 FlowDocument 只是添加文本块StackPanels WrapPane
  • 如何在 Python OpenCV 中读取 TIFF 图像的 Alpha 通道?

    我想使用 Python OpenCV 从 tiff 图像中读取 alpha 通道 我正在使用 Enthought Canopy 和 OpenCV 2 4 5 3 模块 我按照 OpenCV 网站的教程使用 cv2 imread 但它似乎不起
  • 通过函数链创建节点和边时,在命令末尾使用 Iterate() 步骤。这一步有什么用呢?

    在 Tinkerpop 3 3 Gremlin 中通过函数链创建节点和边时 在命令末尾使用 Iterate 步骤 这个 iterate 步骤的意义是什么 我在解释其功能的文档中找不到任何提及 iterate 步骤的内容 有人可以向我指出文档
  • 第二次在 foreach 时未在函数内定义变量

    考虑所有这些文件 vars php if local var var foo foo var1 var1 foo1 foo1 else var foo var1 foo1 remote vars remote php is the same
  • Facebook 与 API 版本 2.9 共享自定义参数

    我需要在 Facebook 上分享测验结果 其中包含自定义标题 图片和说明 效果完美4月18日更新至2 9版本之前 但它不适用于 2 9 版本 那我是不是错过了什么 或者 Facebook 不希望我们在 2017 年分享我们网站的自定义 F
  • 高尔夫代码:Mandelbrot 集

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 代码高尔夫的通常规则 下面以Python中的实现为例 from PIL import Imag
  • 如何对“process.platform”的程序撒谎?

    有一个在 Node 上运行的 CLI 可以通过以下方式执行command在命令行上 在其代码中 通过以下方式对 Windows 用户停用了某些功能if process platform win32 process exit 1 现在我想禁用
  • 如何匹配特定的 io::Error 类型?

    我试图一次读入一个文件直到最后 2 个字节 并且我想捕获 EOF 错误 use byteorder BigEndian ReadBytesExt 1 3 4 use std fs File fn main let filename etc
  • 使用 ARM TrustZone 防止从非安全世界访问内存区域

    Context 我想拥有一个有钱人GNU Linux操作系统运行在正常的世界和一个带有集成的小型操作系统Monitor运行在安全世界 要求 我们必须绝对避免 the 正常的世界访问安全世界内存区域 Question 具有哪些特征信任区我们需
  • Typescript 和 __proto__ 属性

    因此 每次提到 proto 后通常都会提到 Brendan Eich 请求不要使用它 我一直在使用 Typescript 进行一些反射 使用它将类的原型链导航到提供的祖先类 并且希望注入保存类元数据的单个原型属性 有谁知道我可能产生的性能开