All Downloads are FREE. Search and download functionalities are using the official Maven repository.

examples.Foo Maven / Gradle / Ivy

Go to download

A distribution of rhino which releases snapshots from a submodule folder containing forked sources.

The newest version!
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

import org.mozilla.javascript.*;
import org.mozilla.javascript.annotations.JSFunction;
import org.mozilla.javascript.annotations.JSGetter;

/**
 * An example host object class.
 *
 * Here's a shell session showing the Foo object in action:
 * 
 * js> defineClass("Foo")
 * js> foo = new Foo();         A constructor call, see Foo below.
 * [object Foo]                 The "Foo" here comes from getClassName.
 * js> foo.counter;             The counter property is defined by the defineProperty
 * 0                            call below and implemented by the getCounter
 * js> foo.counter;             method below.
 * 1
 * js> foo.counter;
 * 2
 * js> foo.resetCounter();      Results in a call to resetCounter.
 * js> foo.counter;             Now the counter has been reset.
 * 0
 * js> foo.counter;
 * 1
 * js> bar = new Foo(37);       Create a new instance.
 * [object Foo]
 * js> bar.counter;             This instance's counter is distinct from
 * 37                           the other instance's counter.
 * js> foo.varargs(3, "hi");    Calls varargs.
 * this = [object Foo]; args = [3, hi]
 * js> foo[7] = 34;             Since we extended ScriptableObject, we get
 * 34                           all the behavior of a JavaScript object
 * js> foo.a = 23;              for free.
 * 23
 * js> foo.a + foo[7];
 * 57
 * js>
 * 
* * @see org.mozilla.javascript.Context * @see org.mozilla.javascript.Scriptable * @see org.mozilla.javascript.ScriptableObject * * @author Norris Boyd */ public class Foo extends ScriptableObject { private static final long serialVersionUID = -3833489808933339159L; /** * The zero-parameter constructor. * * When Context.defineClass is called with this class, it will * construct Foo.prototype using this constructor. */ public Foo() { } /** * The Java method defining the JavaScript Foo constructor. * * Takes an initial value for the counter property. * Note that in the example Shell session above, we didn't * supply a argument to the Foo constructor. This means that * the Undefined value is used as the value of the argument, * and when the argument is converted to an integer, Undefined * becomes 0. */ public Foo(int counterStart) { counter = counterStart; } /** * Returns the name of this JavaScript class, "Foo". */ @Override public String getClassName() { return "Foo"; } /** * The Java method defining the JavaScript resetCounter function. * * Resets the counter to 0. */ @JSFunction public void resetCounter() { counter = 0; } /** * The Java method implementing the getter for the counter property. *

* If "setCounter" had been defined in this class, the runtime would * call the setter when the property is assigned to. */ @JSGetter public int getCounter() { return counter++; } /** * An example of a variable-arguments method. * * All variable arguments methods must have the same number and * types of parameters, and must be static.

* @param cx the Context of the current thread * @param thisObj the JavaScript 'this' value. * @param args the array of arguments for this call * @param funObj the function object of the invoked JavaScript function * This value is useful to compute a scope using * Context.getTopLevelScope(). * @return computes the string values and types of 'this' and * of each of the supplied arguments and returns them in a string. * * @see org.mozilla.javascript.ScriptableObject#getTopLevelScope */ @JSFunction public static Object varargs(Context cx, Scriptable thisObj, Object[] args, Function funObj) { StringBuffer buf = new StringBuffer(); buf.append("this = "); buf.append(Context.toString(thisObj)); buf.append("; args = ["); for (int i=0; i < args.length; i++) { buf.append(Context.toString(args[i])); if (i+1 != args.length) buf.append(", "); } buf.append("]"); return buf.toString(); } /** * A piece of private data for this class. */ private int counter; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy