2017-05-19 4 views
-2

Ich habe ein kleines Problem. Ich kann nicht verwenden object.create() scheinen, object.setprototypeof() oder jede Funktion, die in dieser Liste:Fehle ich etwas für Javascript?

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

Ich erhalte eine Meldung „Funktion nicht definiert ist“, wenn das Skript versucht, object.create() zu verwenden.

Ich brauche es hauptsächlich für ein benutzerdefiniertes JS-Skript für After Effects, das ich online gefunden habe und ich habe eine Vielzahl verschiedener Skript-Editoren wie Adobe ExtendScript Toolkit, Monodevelop und VS ausprobiert.

Fehle ich eine Bibliothek oder etwas? Ich habe versucht, das neueste Java-SDK zu installieren, um zu sehen, ob es mir etwas geben würde, aber ich hatte kein Glück. Kann mir jemand helfen?

+4

Der Versuch, mit Object.create da es Groß- und Kleinschreibung. – Ozan

+0

Könnten Sie bitte Ihren Code posten, ich glaube, es ist ein Syntaxproblem – Charles

+0

Danke für die Wiederholung. Auch hier wurde der Code von jemand anderem geschrieben, um Animationen in After Effects in ein anderes Programm zu exportieren. Link: http://n4te.com/x/1964-DRdD.txt – RandomTK

Antwort

0

Sie können sowohl Object.create als auch Object.setPrototypeOf verwenden.

ExtendScript eigentlich mit EcmaScript 3, die nicht alle JavaScript-Funktionen von Version verfügbar hat 5.

Wie Sie in MDN, für Object.create sehen:

Anfängliche Definition. Implementiert in JavaScript 1.8.5.

Und für Object.setPrototypeOf: Die ursprüngliche Definition war in EcmaScript 2015

jedoch für viele dieser Funktionen, die Sie eine polyfill erstellen können neue Funktionen wie Object.create, zu unterstützen und manchmal bietet MDN jene polyfills:

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.

  • Wie @Ozan sagt in den Kommentaren:

    mit Object.create Der Versuch, da es Groß- und Kleinschreibung.

  • Für einige Funktionen haben Sie können nicht polyfills diese Funktionen unterstützen (aber Sie können transpillers, wie babel verwenden).

  • hat einige von MDN polyfills nicht EcmaScript unterstützen 3.

Verwandte Themen