【问题标题】:Am I missing something for Javascript?我错过了 Javascript 的东西吗?
【发布时间】:2017-10-19 21:15:24
【问题描述】:

我有一个小问题。我似乎无法使用 object.create()、object.setprototypeof() 或此列表中的任何函数:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object

当脚本尝试使用 object.create() 时,我收到“函数未定义”消息。

我主要需要它来为我在网上找到的 After Effects 自定义 JS 脚本,并且我尝试了许多不同的脚本编辑器,例如 Adob​​e ExtendScript Toolkit、Monodevelop 和 VS。

我错过了图书馆还是什么?我尝试安装最新的 java sdk 看看它是否会给我一些东西,但我没有运气。有人可以帮帮我吗?

【问题讨论】:

  • 尝试使用 Object.create,因为它区分大小写。
  • 能否请您发布您的代码,我认为这是一个语法问题
  • 感谢重播。同样,代码是由其他人编写的,用于将后效中的动画导出到另一个程序中。链接:n4te.com/x/1964-DRdD.txt

标签: javascript adobe extendscript after-effects


【解决方案1】:

您可以同时使用Object.createObject.setPrototypeOf

ExtendScript 实际上使用的是 EcmaScript 3,它不具备版本 5 中提供的所有 JavaScript 功能。

正如您在 MDN 中看到的,对于 Object.create

初始定义。在 JavaScript 1.8.5 中实现。

对于Object.setPrototypeOf:最初的定义是在 EcmaScript 2015 中。

但是,对于许多这些功能,您可以创建一个 polyfill 来支持新功能,例如 Object.create,有时 MDN 会提供这些 polyfill:

Object.createpolyfill:

if (typeof Object.create != 'function') {
  Object.create = (function(undefined) {
    var Temp = function() {};
    return function (prototype, propertiesObject) {
      if(prototype !== Object(prototype)) {
        throw TypeError(
          'Argument must be an object, or null'
        );
      }
      Temp.prototype = prototype || {};
      var result = new Temp();
      Temp.prototype = null;
      if (propertiesObject !== undefined) {
        Object.defineProperties(result, propertiesObject); 
      } 

      // to imitate the case of Object.create(null)
      if(prototype === null) {
         result.__proto__ = null;
      } 
      return result;
    };
  })();
}

Object.setPrototypeOfpolyfill:

Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {
  obj.__proto__ = proto;
  return obj; 
}

附言

  • 正如@Ozan 在 cmets 中所说:

    尝试使用 Object.create,因为它区分大小写。

  • 对于某些功能,您不能使用 polyfill 来支持这些功能(但您可以使用转译器,例如 babel)。

  • 一些 MDN polyfill 不支持 EcmaScript 3。

【讨论】:

    猜你喜欢
    • 2012-02-11
    • 2021-03-14
    • 1970-01-01
    • 2010-09-06
    • 2019-09-23
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    相关资源
    最近更新 更多