在 Three.js 继承模式中对原型使用扩展有什么好处?

2024-02-20

使用优秀的 Three.js 框架,目前正在寻找良好的 javascript 继承模式,我了解了 Three.js 中所做的事情。 我现在对正在发生的事情有了很好的了解,除了一些“类”,例如 Vector3。

特别是,我不清楚为什么有些方法是直接添加到原型中,有些方法是使用 THREE.extend 添加的同一个“班级”,如下所示:

...
THREE.Vector3.prototype = {
    setX: function ( x ) {
         this.x = x;
         return this;

    },
...
};

//and then later in the same file 
THREE.extend( THREE.Vector3.prototype, {
    applyEuler: function () {...}(),
    ...
}

使用扩展有什么好处,而可以扩展原型对象?

Edit

代码示例是同一文件的一部分,请参阅https://github.com/mrdoob/ Three.js/blob/master/src/math/Vector3.js https://github.com/mrdoob/three.js/blob/master/src/math/Vector3.js我不是问这两部分有什么区别,而是问为什么在定义原型之后就使用extend。 或者换句话说(使用前面的摘录),为什么不直接写:

...
THREE.Vector3.prototype = {
    setX: function ( x ) {
         this.x = x;
         return this;

    },
    applyEuler: function () {...}(),
...
};

为什么有的方法直接添加到原型中,有的使用THREE.extend添加

说真的,这没有任何意义。

正如您可以在责怪观 https://github.com/mrdoob/three.js/blame/master/src/math/Vector3.js,@mrdoob 引入了这个奇怪的东西修订版cc57273 https://github.com/mrdoob/three.js/commit/cc57273cf4ae579f5dd638aed213e7aadf161f26。提交消息说:

恢复到 Object.prototype = { 模式。仅在 真正需要它的方法。

在项目上使用最新版本的lib时很神秘 我正在处理我收到此错误:

> Uncaught TypeError: Object [object Object] has no method 'set'

这是当 THREE.UniformsLib.common.diffuse 初始化一个 THREE.Color(THREE.Color.set() 似乎未定义)。对于一些 因为只有当我在 Three.js 之前加载 Box2D 时才会发生这种情况。如果我加载 之后一切都很好。但这也解决了问题。

这正在恢复提交 e2df06e https://github.com/mrdoob/three.js/commit/e2df06e005e01312159167b10cff100f68d68ed2通过 @bhouston 在哪里extend被介绍:

修复三个错过的闭包转换。切换到扩展数学 原型而不是替换它们。这是为了确保类型 在类型的原型定义中的闭包中创建的得到它们的 原型更新了完整的定义。

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

在 Three.js 继承模式中对原型使用扩展有什么好处? 的相关文章

随机推荐

  • ScrollView 中的 Xamarin Center StackLayout

    我正在尝试水平居中StackLayout在一个ScrollView 但是 那StackLayout不是水平居中 它左对齐 我尝试将ScrollView但整个视图是不可滚动的 只有中心部分是可滚动的
  • Typescript用户定义的类型保护检查对象具有数组中的所有属性

    我正在尝试写一个用户定义的类型保护 https www typescriptlang org docs handbook advanced types html user defined type guards测试给定的值是否具有给定数组中
  • 我们可以在postman中读取excel中的数据进行js测试吗?

    我们可以在postman中读取excel中的数据进行js测试吗 或者 我们可以编写一个从 excel csv notepad 读取数据的 js 脚本吗 我写了一些 js 脚本来自动化我的 API 测试 我正在使用 Newman 从命令提示符
  • C# 文件处理:在可执行文件存在的目录中创建文件

    我正在创建一个独立的应用程序 该应用程序将分发给许多用户 现在 每个人都可以将可执行文件放置在其计算机上的不同位置 我希望在执行可执行文件的目录中创建一个新文件 因此 如果用户的可执行文件位于 C exefile 该文件是在那里创建的 但是
  • 如何更改 Fluent NHibernate 中小数的默认比例和精度?

    在我正在构建的应用程序中 我有许多具有特定精度和小数位数的小数字段 需要从数据库进行映射 我可以通过使用来实现这一点Precision and Scale 方法 public class ClassAMap ClassMap
  • Unity UI 中图像模糊或像素化

    我有一个 211x211 的图像 其设置如下 在我的统一用户界面中 它看起来模糊 像素化 我的统一图像宽度高度设置为 40x40 我做错了什么 即使我尝试过 2048x2048 图像 但仍然得到相同的模糊效果 图像不清楚 这是我的游戏视图
  • JSoup 不会获取所有项目?

    因此 我尝试使用 JSoup 解析一个简单的列表 不幸的是 程序仅返回列表中以 N 开头的条目之前的条目 我不知道为什么会这样 这是我的代码 public ArrayList
  • 在 Python 中动态参数化多个测试

    我正在尝试使用 Pytest 编写动态测试套件 其中测试数据保存在单独的文件中 例如YAML 文件或 csv 我想运行多个测试 所有这些测试都是从同一个文件进行参数化的 假设我有一个测试文件test foo py 看起来像这样 import
  • 如何在 PRISM 中每次导航时创建新视图?

    我在我的新项目中使用 WPF4 和 PRISM4 有一个模块 其中有多个视图 DI 是统一完成的 当我第一次从 ViewA 导航到 ViewB 时 将创建 ViewB 并调用其构造函数 但是 当我尝试第二次 第三次导航到 ViewB 时 不
  • 如何有效更新两个结构体的值

    我有以下代码 用于解析 YAML 文件并需要匹配一个结构中的值external并更新internal结构体的type财产 例如 这是 yaml 文件 为简单起见 翻译为 bin 和正确解析的内容 package main import fm
  • 如何在Android中使用默认动画?

    我正在尝试使用带有片段的活动的默认动画 在这里我发现了一些关于它的信息 Android 对Fragment使用Activity的默认动画 https stackoverflow com questions 14376810 android
  • Mavericks 上的 MySQL 服务器启动问题

    我在 MacBook 上使用 MySQL 时遇到困难 我正在尝试使用以下命令启动我的服务器sudo mysqld safe这会产生以下输出 140131 00 03 02 mysqld safe Logging to usr local v
  • 不使用 eval/new 函数的 JavaScript 模板库

    Google Chrome 扩展程序使用manifest version 2被限制使用eval or new Function 我检查的所有 JavaScript 模板库 mustachejs underscorejs jQuery 模板
  • Laravel 覆盖命名路线并采取错误的路线

    我在我的routes php 文件中定义了这个 Route post gestionAdministrador array as gt Loguearse uses gt AdministradorController Login Rout
  • 谷歌应用引擎上的 psycopg2 出现问题

    当我尝试在我的谷歌应用程序引擎应用程序中实现框架 Pony ORM 时遇到问题 关键是 Pony 使用 psycopg2 PostgreSQL 适配器 当我尝试向数据库发出请求时 它会引发一个异常 它找不到 psycopg2 模块 在本地
  • data-sly-use、data-sly-resource、data-sly-include 和 data-sly-template 之间有什么区别?

    有什么区别 data sly use data sly resource data sly include and data sly template 我正在阅读文档Sightly AEM我非常困惑 据我所知 data sly use用于添
  • 为 STL 随机数生成器编写工厂方法

    我正在尝试通过配置文件提供一个界面 以便我的用户为他们正在使用的某些参数选择一个发行版 我想使用 STL 随机数生成器算法来实现此目的 假设我的程序从命令行读取 JSON 对于下面提供的 JSON 程序需要意识到它应该根据给定均值和标准差的
  • C# 是否有一个好的 leveldb 端口? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望在我的纯 C 项目中使用 leveldb 我在 google 上搜索了 leveldb 的 C 版本 但没有找到 谁能告诉我在哪里可
  • JAXB 按原样使用 String

    我使用 REST 我想知道是否可以告诉 jaxb 将字符串字段 按原样 插入到传出的 xml 中 当然 我想在返回之前将其拆开 但我想节省这一步 XmlRootElement name unnestedResponse public cla
  • 在 Three.js 继承模式中对原型使用扩展有什么好处?

    使用优秀的 Three js 框架 目前正在寻找良好的 javascript 继承模式 我了解了 Three js 中所做的事情 我现在对正在发生的事情有了很好的了解 除了一些 类 例如 Vector3 特别是 我不清楚为什么有些方法是直接