我错过了Javascript的东西吗?

时间:2017-05-19 16:46:34

标签: javascript adobe extendscript after-effects

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

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

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

我需要它主要用于我在网上找到的After Effects的自定义JS脚本,我尝试过各种不同的脚本编辑器,如Adobe ExtendScript Toolkit,Monodevelop和VS。

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

1 个答案:

答案 0 :(得分:0)

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

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

正如您在MDN中看到的那样,Object.create

  

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

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

但是,对于很多这些功能,您可以创建一个polyfill以支持Object.create等新功能,有时MDN会提供这些填充:

  

Object.create polyfill:

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.setPrototypeOf polyfill:

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

P.S。

  • 正如@Ozan在评论中所说:

      

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

  • 对于某些功能,您无法使用polyfill来支持这些功能(但您可以使用transpillers,例如babel)。

  • 部分MDN polyfill不支持EcmaScript 3。