我有一个小问题。我似乎无法使用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来看看它是否会给我一些东西,但我没有运气。有人可以帮助我吗?
答案 0 :(得分:0)
您可以同时使用Object.create
和Object.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。