⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scriptableobject.java

📁 這是一個javascript 的 interpreter是了解 web browser的好材料
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            if (parmTypes.length == 1) {                if (delegatedForm) {                    errorId = "msg.setter2.expected";                }            } else if (parmTypes.length == 2) {                Object argType = parmTypes[0];                // Allow ScriptableObject for compatibility                if (!(argType == ScriptRuntime.ScriptableClass ||                      argType == ScriptRuntime.ScriptableObjectClass))                {                    errorId = "msg.setter2.parms";                } else if (!delegatedForm) {                    errorId = "msg.setter1.parms";                }            } else {                errorId = "msg.setter.parms";            }            if (errorId != null) {                throw Context.reportRuntimeError1(errorId, setter.toString());            }        }        GetterSlot gslot = (GetterSlot)getSlot(propertyName, 0,                                               SLOT_MODIFY_GETTER_SETTER);        gslot.setAttributes(attributes);        gslot.getter = getterBox;        gslot.setter = setterBox;    }    /**     * Search for names in a class, adding the resulting methods     * as properties.     *     * <p> Uses reflection to find the methods of the given names. Then     * FunctionObjects are constructed from the methods found, and     * are added to this object as properties with the given names.     *     * @param names the names of the Methods to add as function properties     * @param clazz the class to search for the Methods     * @param attributes the attributes of the new properties     * @see org.mozilla.javascript.FunctionObject     */    public void defineFunctionProperties(String[] names, Class clazz,                                         int attributes)    {        Method[] methods = FunctionObject.getMethodList(clazz);        for (int i=0; i < names.length; i++) {            String name = names[i];            Method m = FunctionObject.findSingleMethod(methods, name);            if (m == null) {                throw Context.reportRuntimeError2(                    "msg.method.not.found", name, clazz.getName());            }            FunctionObject f = new FunctionObject(name, m, this);            defineProperty(name, f, attributes);        }    }    /**     * Get the Object.prototype property.     * See ECMA 15.2.4.     */    public static Scriptable getObjectPrototype(Scriptable scope) {        return getClassPrototype(scope, "Object");    }    /**     * Get the Function.prototype property.     * See ECMA 15.3.4.     */    public static Scriptable getFunctionPrototype(Scriptable scope) {        return getClassPrototype(scope, "Function");    }    /**     * Get the prototype for the named class.     *     * For example, <code>getClassPrototype(s, "Date")</code> will first     * walk up the parent chain to find the outermost scope, then will     * search that scope for the Date constructor, and then will     * return Date.prototype. If any of the lookups fail, or     * the prototype is not a JavaScript object, then null will     * be returned.     *     * @param scope an object in the scope chain     * @param className the name of the constructor     * @return the prototype for the named class, or null if it     *         cannot be found.     */    public static Scriptable getClassPrototype(Scriptable scope,                                               String className)    {        scope = getTopLevelScope(scope);        Object ctor = getProperty(scope, className);        Object proto;        if (ctor instanceof BaseFunction) {            proto = ((BaseFunction)ctor).getPrototypeProperty();        } else if (ctor instanceof Scriptable) {            Scriptable ctorObj = (Scriptable)ctor;            proto = ctorObj.get("prototype", ctorObj);        } else {            return null;        }        if (proto instanceof Scriptable) {            return (Scriptable)proto;        }        return null;    }    /**     * Get the global scope.     *     * <p>Walks the parent scope chain to find an object with a null     * parent scope (the global object).     *     * @param obj a JavaScript object     * @return the corresponding global scope     */    public static Scriptable getTopLevelScope(Scriptable obj)    {        for (;;) {            Scriptable parent = obj.getParentScope();            if (parent == null) {                return obj;            }            obj = parent;        }    }    /**     * Seal this object.     *     * A sealed object may not have properties added or removed. Once     * an object is sealed it may not be unsealed.     *     * @since 1.4R3     */    public synchronized void sealObject() {        if (count >= 0) {            count = ~count;        }    }    /**     * Return true if this object is sealed.     *     * It is an error to attempt to add or remove properties to     * a sealed object.     *     * @return true if sealed, false otherwise.     * @since 1.4R3     */    public final boolean isSealed() {        return count < 0;    }    private void checkNotSealed(String name, int index)    {        if (!isSealed())            return;        String str = (name != null) ? name : Integer.toString(index);        throw Context.reportRuntimeError1("msg.modify.sealed", str);    }    /**     * Gets a named property from an object or any object in its prototype chain.     * <p>     * Searches the prototype chain for a property named <code>name</code>.     * <p>     * @param obj a JavaScript object     * @param name a property name     * @return the value of a property with name <code>name</code> found in     *         <code>obj</code> or any object in its prototype chain, or     *         <code>Scriptable.NOT_FOUND</code> if not found     * @since 1.5R2     */    public static Object getProperty(Scriptable obj, String name)    {        Scriptable start = obj;        Object result;        do {            result = obj.get(name, start);            if (result != Scriptable.NOT_FOUND)                break;            obj = obj.getPrototype();        } while (obj != null);        return result;    }    /**     * Gets an indexed property from an object or any object in its prototype chain.     * <p>     * Searches the prototype chain for a property with integral index     * <code>index</code>. Note that if you wish to look for properties with numerical     * but non-integral indicies, you should use getProperty(Scriptable,String) with     * the string value of the index.     * <p>     * @param obj a JavaScript object     * @param index an integral index     * @return the value of a property with index <code>index</code> found in     *         <code>obj</code> or any object in its prototype chain, or     *         <code>Scriptable.NOT_FOUND</code> if not found     * @since 1.5R2     */    public static Object getProperty(Scriptable obj, int index)    {        Scriptable start = obj;        Object result;        do {            result = obj.get(index, start);            if (result != Scriptable.NOT_FOUND)                break;            obj = obj.getPrototype();        } while (obj != null);        return result;    }    /**     * Returns whether a named property is defined in an object or any object     * in its prototype chain.     * <p>     * Searches the prototype chain for a property named <code>name</code>.     * <p>     * @param obj a JavaScript object     * @param name a property name     * @return the true if property was found     * @since 1.5R2     */    public static boolean hasProperty(Scriptable obj, String name)    {        return null != getBase(obj, name);    }    /**     * If hasProperty(obj, name) would return true, then if the property that     * was found is compatible with the new property, this method just returns.     * If the property is not compatible, then an exception is thrown.     *     * A property redefinition is incompatible if the first definition was a     * const declaration or if this one is.  They are compatible only if neither     * was const.     */    public static void redefineProperty(Scriptable obj, String name,                                        boolean isConst)    {        Scriptable base = getBase(obj, name);        if (base == null)            return;        if (base instanceof ConstProperties) {            ConstProperties cp = (ConstProperties)base;            if (cp.isConst(name))                throw Context.reportRuntimeError1("msg.const.redecl", name);        }        if (isConst)            throw Context.reportRuntimeError1("msg.var.redecl", name);    }    /**     * Returns whether an indexed property is defined in an object or any object     * in its prototype chain.     * <p>     * Searches the prototype chain for a property with index <code>index</code>.     * <p>     * @param obj a JavaScript object     * @param index a property index     * @return the true if property was found     * @since 1.5R2     */    public static boolean hasProperty(Scriptable obj, int index)    {        return null != getBase(obj, index);    }    /**     * Puts a named property in an object or in an object in its prototype chain.     * <p>     * Searches for the named property in the prototype chain. If it is found,     * the value of the property in <code>obj</code> is changed through a call     * to {@link Scriptable#put(String, Scriptable, Object)} on the     * prototype passing <code>obj</code> as the <code>start</code> argument.     * This allows the prototype to veto the property setting in case the     * prototype defines the property with [[ReadOnly]] attribute. If the     * property is not found, it is added in <code>obj</code>.     * @param obj a JavaScript object     * @param name a property name     * @param value any JavaScript value accepted by Scriptable.put     * @since 1.5R2     */    public static void putProperty(Scriptable obj, String name, Object value)    {        Scriptable base = getBase(obj, name);        if (base == null)            base = obj;        base.put(name, obj, value);    }    /**     * Puts a named property in an object or in an object in its prototype chain.     * <p>     * Searches for the named property in the prototype chain. If it is found,     * the value of the property in <code>obj</code> is changed through a call     * to {@link Scriptable#put(String, Scriptable, Object)} on the     * prototype passing <code>obj</code> as the <code>start</code> argument.     * This allows the prototype to veto the property setting in case the     * prototype defines the property with [[ReadOnly]] attribute. If the     * property is not found, it is added in <code>obj</code>.     * @param obj a JavaScript object     * @param name a property name     * @param value any JavaScript value accepted by Scriptable.put     * @since 1.5R2     */    public static void putConstProperty(Scriptable obj, String name, Object value)    {        Scriptable base = getBase(obj, name);        if (base == null)            base = obj;        if (base instanceof ConstProperties)            ((ConstProperties)base).putConst(name, obj, value);    }    /**     * Puts an indexed property in an object or in an object in its prototype chain.     * <p>     * Searches for the indexed property in the prototype chain. If it is found,     * the value of the property in <code>obj</code> is changed through a call     * to {@link Scriptable#put(int, Scriptable, Object)} on the prototype     * passing <code>obj</code> as the <code>start</code> argument. This allows     * the prototype to veto the property setting in case the prototype defines     * the property with [[ReadOnly]] attribute. If the property is not found,      * it is added in <code>obj</code>.     * @param obj a JavaScript object     * @param index a property index     * @param value any JavaScript value accepted by Scriptable.put     * @since 1.5R2     */    public static void putProperty(Scriptable obj, int index, Object value)    {        Scriptable base = getBase(obj, index);        if (base == null)            base = obj;        base.put(index, obj, value);    }    /**     * Removes the property from an object or its prototype chain.     * <p>     * Searches for a property with <cod

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -