This file is indexed.

/usr/share/doc/libjs-mathjax-doc/html/api/object.html is in libjs-mathjax-doc 2.7+20171212-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
  <meta charset="utf-8">
  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <title>The MathJax Object-Oriented Programming Model &mdash; MathJax 2.7 documentation</title>
  

  
  
  
  

  

  
  
    

  

  
  
    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
  

  

  
        <link rel="index" title="Index"
              href="../genindex.html"/>
        <link rel="search" title="Search" href="../search.html"/>
    <link rel="top" title="MathJax 2.7 documentation" href="../index.html"/>
        <link rel="up" title="The MathJax API" href="index.html"/>
        <link rel="next" title="Accessibility Features" href="../misc/accessibility-features.html"/>
        <link rel="prev" title="The Base Jax Class" href="jax.html"/> 

  
  <script src="../_static/js/modernizr.min.js"></script>

</head>

<body class="wy-body-for-nav" role="document">

   
  <div class="wy-grid-for-nav">

    
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search">
          

          
            <a href="../index.html" class="icon icon-home"> MathJax
          

          
          </a>

          
            
            
              <div class="version">
                2.7
              </div>
            
          

          
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>

          
        </div>

        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
          
            
            
              
            
            
              <p class="caption"><span class="caption-text">Basic Usage</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../mathjax.html">What is MathJax?</a></li>
<li class="toctree-l1"><a class="reference internal" href="../start.html">Getting Started with MathJax</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installing and Testing MathJax</a></li>
<li class="toctree-l1"><a class="reference internal" href="../configuration.html">Loading and Configuring MathJax</a></li>
<li class="toctree-l1"><a class="reference internal" href="../config-files.html">Combined MathJax Configurations</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../tex.html">MathJax TeX and LaTeX Support</a></li>
<li class="toctree-l1"><a class="reference internal" href="../mathml.html">MathJax MathML Support</a></li>
<li class="toctree-l1"><a class="reference internal" href="../asciimath.html">MathJax AsciiMath Support</a></li>
<li class="toctree-l1"><a class="reference internal" href="../output.html">MathJax Output Formats</a></li>
<li class="toctree-l1"><a class="reference internal" href="../font-support.html">MathJax Font Support</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../localization.html">MathJax Localization</a></li>
<li class="toctree-l1"><a class="reference internal" href="../safe-mode.html">MathJax Safe-mode</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../community.html">The MathJax Community</a></li>
</ul>
<p class="caption"><span class="caption-text">Configuration options</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../options/index.html">Configuration options</a></li>
</ul>
<p class="caption"><span class="caption-text">Advanced topics</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../advanced/model.html">The MathJax Processing Model</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/startup.html">The MathJax Startup Sequence</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/synchronize.html">Synchronizing Your Code with MathJax</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/dynamic.html">Loading MathJax Dynamically</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/typeset.html">Modifying Math on the Page</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/toMathML.html">Obtaining the MathML for an Expression</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/extension-writing.html">Writing MathJax Extensions</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/debugging-tips.html">Debugging Tips</a></li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/mathjax-node.html">MathJax on NodeJS</a></li>
</ul>
<p class="caption"><span class="caption-text">The MathJax API</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Details of the MathJax API</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="variable.html">The MathJax variable</a></li>
<li class="toctree-l2"><a class="reference internal" href="hub.html">The MathJax.Hub object</a></li>
<li class="toctree-l2"><a class="reference internal" href="ajax.html">The MathJax.Ajax object</a></li>
<li class="toctree-l2"><a class="reference internal" href="message.html">The MathJax.Message object</a></li>
<li class="toctree-l2"><a class="reference internal" href="html.html">The MathJax.HTML object</a></li>
<li class="toctree-l2"><a class="reference internal" href="callback.html">The MathJax.CallBack class</a></li>
<li class="toctree-l2"><a class="reference internal" href="queue.html">The MathJax.CallBack.Queue class</a></li>
<li class="toctree-l2"><a class="reference internal" href="signal.html">The MathJax.CallBack.Signal class</a></li>
<li class="toctree-l2"><a class="reference internal" href="localization.html">The MathJax.Localization object</a></li>
<li class="toctree-l2"><a class="reference internal" href="inputjax.html">The MathJax.InputJax class</a></li>
<li class="toctree-l2"><a class="reference internal" href="outputjax.html">The MathJax.OutputJax class</a></li>
<li class="toctree-l2"><a class="reference internal" href="elementjax.html">The MathJax.ElementJax class</a></li>
<li class="toctree-l2"><a class="reference internal" href="jax.html">The base Jax class</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">The MathJax Object-Oriented Programming Model</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#static-properties">Static Properties</a></li>
<li class="toctree-l3"><a class="reference internal" href="#static-methods">Static Methods</a></li>
<li class="toctree-l3"><a class="reference internal" href="#properties">Properties</a></li>
<li class="toctree-l3"><a class="reference internal" href="#methods">Methods</a></li>
<li class="toctree-l3"><a class="reference internal" href="#accessing-the-super-class">Accessing the Super Class</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p class="caption"><span class="caption-text">Miscellanea</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../misc/accessibility-features.html">Accessibility features</a></li>
<li class="toctree-l1"><a class="reference internal" href="../misc/browser-compatibility.html">Browser Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../misc/epub.html">EPUB3 Reading Systems</a></li>
<li class="toctree-l1"><a class="reference internal" href="../misc/badges.html">MathJax Badges and Logo</a></li>
<li class="toctree-l1"><a class="reference internal" href="../misc/articles.html">Articles and Presentations</a></li>
<li class="toctree-l1"><a class="reference internal" href="../misc/platforms.html">Using MathJax in Web Platforms</a></li>
<li class="toctree-l1"><a class="reference internal" href="../misc/faq.html">MathJax FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../misc/mathjax-in-use.html">MathJax in Use</a></li>
</ul>
<p class="caption"><span class="caption-text">Upgrading MathJax</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../upgrading/index.html">Upgrading MathJax</a></li>
</ul>
<p class="caption"><span class="caption-text">Reference Pages</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../reference/HTML-snippets.html">HTML snippets</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/CSS-styles.html">CSS style objects</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/localization-strings.html">Localization strings</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/glossary.html">Glossary</a></li>
</ul>

            
          
        </div>
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
        
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="../index.html">MathJax</a>
        
      </nav>


      
      <div class="wy-nav-content">
        <div class="rst-content">
          















<div role="navigation" aria-label="breadcrumbs navigation">

  <ul class="wy-breadcrumbs">
    
      <li><a href="../index.html">Docs</a> &raquo;</li>
        
          <li><a href="index.html">The MathJax API</a> &raquo;</li>
        
      <li>The MathJax Object-Oriented Programming Model</li>
    
    
      <li class="wy-breadcrumbs-aside">
        
            
            <a href="../_sources/api/object.rst.txt" rel="nofollow"> View page source</a>
          
        
      </li>
    
  </ul>

  
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
            
  <div class="section" id="the-mathjax-object-oriented-programming-model">
<span id="api-object"></span><h1>The MathJax Object-Oriented Programming Model<a class="headerlink" href="#the-mathjax-object-oriented-programming-model" title="Permalink to this headline"></a></h1>
<p>MathJax uses an object-oriented programming model for its main
components, such as the <cite>Input jax</cite>, <cite>Output jax</cite>, and <cite>Element jax</cite>.
The model is intended to be light-weight and is based on JavaScript’s
prototype inheritance mechanism.  Object classes are created by making
subclasses of <cite>MathJax.Object</cite> or one of its subclasses, and are
instantiated by calling the object class as you would a function.</p>
<p>For example:</p>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">MathJax</span><span class="p">.</span><span class="nb">Object</span><span class="p">.</span><span class="nx">Foo</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nb">Object</span><span class="p">.</span><span class="nx">Subclass</span><span class="p">({</span>
  <span class="nx">Init</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">x</span><span class="p">)</span> <span class="p">{</span><span class="k">this</span><span class="p">.</span><span class="nx">setX</span><span class="p">(</span><span class="nx">x</span><span class="p">)},</span>
  <span class="nx">getX</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span><span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">x</span><span class="p">},</span>
  <span class="nx">setX</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">x</span><span class="p">)</span> <span class="p">{</span><span class="k">this</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="nx">x</span><span class="p">}</span>
<span class="p">});</span>
<span class="kd">var</span> <span class="nx">foo</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nb">Object</span><span class="p">.</span><span class="nx">Foo</span><span class="p">(</span><span class="s2">&quot;bar&quot;</span><span class="p">);</span>
<span class="nx">foo</span><span class="p">.</span><span class="nx">getX</span><span class="p">();</span>                <span class="c1">// returns &quot;bar&quot;</span>
<span class="nx">foo</span><span class="p">.</span><span class="nx">setX</span><span class="p">(</span><span class="s2">&quot;foobar&quot;</span><span class="p">);</span>
<span class="nx">foo</span><span class="p">.</span><span class="nx">getX</span><span class="p">();</span>                <span class="c1">// returns &quot;foobar&quot;</span>
</pre></div>
</div>
<p>Object classes can have static properties and methods, which are
accessed via the object class variable. E.g.,
<code class="docutils literal"><span class="pre">MathJax.Object.Foo.SUPER</span></code> or <code class="docutils literal"><span class="pre">MathJax.Object.Foo.Augment()</span></code> for
the object in the example above.  Static values are not inherited by
subclasses.</p>
<div class="section" id="static-properties">
<h2>Static Properties<a class="headerlink" href="#static-properties" title="Permalink to this headline"></a></h2>
<dl class="describe">
<dt>
<code class="descname">SUPER</code></dt>
<dd><p>Pointer to the super class for this subclass.  (It is a reference to
<cite>MathJax.Object</cite> in the example above.)</p>
</dd></dl>

</div>
<div class="section" id="static-methods">
<h2>Static Methods<a class="headerlink" href="#static-methods" title="Permalink to this headline"></a></h2>
<dl class="method">
<dt id="Subclass">
<code class="descname">Subclass</code><span class="sig-paren">(</span><em>def</em><span class="optional">[</span>, <em>static</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#Subclass" title="Permalink to this definition"></a></dt>
<dd><p>Creates a subclass of the given class using the contents of the
<cite>def</cite> object to define new methods and properties of the object
class, and the contents of the optional <cite>static</cite> object to define
new static methods and properties.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>def</strong> — object that defines the properties and methods</li>
<li><strong>static</strong> — object that defines static properties and methods</li>
</ul>
</td>
</tr>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">the new object class</p>
</td>
</tr>
</tbody>
</table>
</dd></dl>

<dl class="method">
<dt id="Augment">
<code class="descname">Augment</code><span class="sig-paren">(</span><em>def</em><span class="optional">[</span>, <em>static</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#Augment" title="Permalink to this definition"></a></dt>
<dd><p>Adds new properties and methods to the class prototype.  All
instances of the object already in existence will receive the new
properties and methods automatically.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>def</strong> — object that defines the properties and methods</li>
<li><strong>static</strong> — object that defines static properties and methods</li>
</ul>
</td>
</tr>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last">the object class itself</p>
</td>
</tr>
</tbody>
</table>
</dd></dl>

</div>
<div class="section" id="properties">
<h2>Properties<a class="headerlink" href="#properties" title="Permalink to this headline"></a></h2>
<dl class="describe">
<dt>
<code class="descname">constructor</code></dt>
<dd><p>Pointer to the constructor function for this class. E.g.,
<code class="docutils literal"><span class="pre">foo.constructor</span></code> would be a reference to <code class="docutils literal"><span class="pre">MathJax.Object.Foo</span></code>
in the example above.</p>
</dd></dl>

</div>
<div class="section" id="methods">
<h2>Methods<a class="headerlink" href="#methods" title="Permalink to this headline"></a></h2>
<dl class="method">
<dt id="Init">
<code class="descname">Init</code><span class="sig-paren">(</span><span class="optional">[</span><em>data</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#Init" title="Permalink to this definition"></a></dt>
<dd><p>An optional function that is called when an instance of the class
is created.  When called, the <cite>this</cite> variable is set to the newly
instantiated object, and the <cite>data</cite> is whatever was passed to the
object constructor.  For instance, in the example above, the
variable <code class="docutils literal"><span class="pre">foo</span></code> is created by calling
<code class="docutils literal"><span class="pre">MathJax.Object.Foo(&quot;bar&quot;)</span></code>, which calls the
<code class="docutils literal"><span class="pre">MathJax.Object.Foo</span></code> object’s <a class="reference internal" href="#Init" title="Init"><code class="xref py py-meth docutils literal"><span class="pre">Init()</span></code></a> method with <cite>data</cite>
equal to <code class="docutils literal"><span class="pre">&quot;bar&quot;</span></code>.  If desired, the <a class="reference internal" href="#Init" title="Init"><code class="xref py py-meth docutils literal"><span class="pre">Init()</span></code></a> method can
create a <em>different</em> object, and return that, in which case this
becomes the return value for the object constructor.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>data</strong> — the data from the constructor call</li>
</ul>
</td>
</tr>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first last"><code class="docutils literal"><span class="pre">null</span></code> or the object to be returned by the constructor</p>
</td>
</tr>
</tbody>
</table>
</dd></dl>

<dl class="method">
<dt id="isa">
<code class="descname">isa</code><span class="sig-paren">(</span><em>class</em><span class="sig-paren">)</span><a class="headerlink" href="#isa" title="Permalink to this definition"></a></dt>
<dd><p>Returns <code class="docutils literal"><span class="pre">true</span></code> if the object is an instance of the given class,
or of a subclass of the given class, and <code class="docutils literal"><span class="pre">false</span></code> otherwise.  So
using the <code class="docutils literal"><span class="pre">foo</span></code> value defined above,</p>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">foo</span><span class="p">.</span><span class="nx">isa</span><span class="p">(</span><span class="nx">MathJax</span><span class="p">.</span><span class="nb">Object</span><span class="p">);</span>      <span class="c1">// returns true</span>
<span class="nx">foo</span><span class="p">.</span><span class="nx">isa</span><span class="p">(</span><span class="nx">MathJax</span><span class="p">.</span><span class="nb">Object</span><span class="p">.</span><span class="nx">Foo</span><span class="p">);</span>  <span class="c1">// returns true</span>
<span class="nx">foo</span><span class="p">.</span><span class="nx">isa</span><span class="p">(</span><span class="nx">MathJax</span><span class="p">.</span><span class="nx">InputJax</span><span class="p">);</span>    <span class="c1">// returns false</span>
</pre></div>
</div>
</dd></dl>

<dl class="method">
<dt id="can">
<code class="descname">can</code><span class="sig-paren">(</span><em>method</em><span class="sig-paren">)</span><a class="headerlink" href="#can" title="Permalink to this definition"></a></dt>
<dd><p>Checks if the object has the given <cite>method</cite> and returns <code class="docutils literal"><span class="pre">true</span></code>
if so, otherwise returns <code class="docutils literal"><span class="pre">false</span></code>.  This allows you to test if an
object has a particular function available before trying to call
it (i.e., if an object implements a particular feature).  For example:</p>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">foo</span><span class="p">.</span><span class="nx">can</span><span class="p">(</span><span class="s2">&quot;getX&quot;</span><span class="p">);</span>  <span class="c1">// returns true</span>
<span class="nx">foo</span><span class="p">.</span><span class="nx">can</span><span class="p">(</span><span class="s2">&quot;bar&quot;</span><span class="p">);</span>   <span class="c1">// returns false</span>
</pre></div>
</div>
</dd></dl>

<dl class="method">
<dt id="has">
<code class="descname">has</code><span class="sig-paren">(</span><em>property</em><span class="sig-paren">)</span><a class="headerlink" href="#has" title="Permalink to this definition"></a></dt>
<dd><p>Checks if the object has the given <cite>property</cite> and returns <code class="docutils literal"><span class="pre">true</span></code>
if so, otherwise returns <code class="docutils literal"><span class="pre">false</span></code>.  This allows you to test if an
object has a particular property available before trying to use
it.  For example:</p>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">foo</span><span class="p">.</span><span class="nx">has</span><span class="p">(</span><span class="s2">&quot;getX&quot;</span><span class="p">);</span>  <span class="c1">// returns true</span>
<span class="nx">foo</span><span class="p">.</span><span class="nx">has</span><span class="p">(</span><span class="s2">&quot;x&quot;</span><span class="p">);</span>     <span class="c1">// returns true</span>
<span class="nx">foo</span><span class="p">.</span><span class="nx">has</span><span class="p">(</span><span class="s2">&quot;bar&quot;</span><span class="p">);</span>   <span class="c1">// returns false</span>
</pre></div>
</div>
</dd></dl>

</div>
<div class="section" id="accessing-the-super-class">
<h2>Accessing the Super Class<a class="headerlink" href="#accessing-the-super-class" title="Permalink to this headline"></a></h2>
<p>If a subclass overrides a method of its parent class, it may want to
call the original function as part of its replacement method.  The
semantics for this are a bit awkward, but work efficiently.  Within a
method, the value <code class="docutils literal"><span class="pre">arguments.callee.SUPER</span></code> refers to the super
class, so you can access any method of the superclass using that.  In
order to have <cite>this</cite> refer to the current object when you call the
super class, however, you need to use <code class="docutils literal"><span class="pre">call()</span></code> or
<code class="docutils literal"><span class="pre">apply()</span></code> to access the given method.</p>
<p>For example, <code class="docutils literal"><span class="pre">arguments.callee.SUPER.method.call(this,data)</span></code> would
call the superclass’ <cite>method</cite> and pass it <cite>data</cite> as its argument,
properly passing the current object as <cite>this</cite>.  Alternatively, you can
use <code class="docutils literal"><span class="pre">this.SUPER(arguments)</span></code> in place of <code class="docutils literal"><span class="pre">arguments.callee.SUPER</span></code>.
It is also possible to refer to the super class explicitly rather than
through <code class="docutils literal"><span class="pre">arguments.callee.SUPER</span></code>, as in the following example:</p>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class1</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nb">Object</span><span class="p">.</span><span class="nx">Subclass</span><span class="p">({</span>
  <span class="nx">Init</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">x</span><span class="p">)</span> <span class="p">{</span><span class="k">this</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="nx">x</span><span class="p">},</span>
  <span class="nx">XandY</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">y</span><span class="p">)</span> <span class="p">{</span><span class="k">return</span> <span class="s2">&quot;Class1: x and y = &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">x</span> <span class="o">+</span> <span class="s2">&quot; and &quot;</span> <span class="o">+</span> <span class="nx">y</span><span class="p">}</span>
<span class="p">});</span>

<span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class2</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class1</span><span class="p">.</span><span class="nx">Subclass</span><span class="p">({</span>
  <span class="nx">XandY</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">y</span><span class="p">)</span> <span class="p">{</span><span class="k">return</span> <span class="s2">&quot;Class2: &quot;</span><span class="o">+</span><span class="nx">arguments</span><span class="p">.</span><span class="nx">callee</span><span class="p">.</span><span class="nx">SUPER</span><span class="p">.</span><span class="nx">XandY</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="k">this</span><span class="p">,</span><span class="nx">y</span><span class="p">)}</span>
<span class="p">});</span>

<span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class3</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class2</span><span class="p">.</span><span class="nx">Subclass</span><span class="p">({</span>
  <span class="nx">XandY</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">y</span><span class="p">)</span> <span class="p">{</span><span class="k">return</span> <span class="s2">&quot;Class3: &quot;</span><span class="o">+</span><span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class2</span><span class="p">.</span><span class="nx">prototype</span><span class="p">.</span><span class="nx">XandY</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="k">this</span><span class="p">,</span><span class="nx">y</span><span class="p">)}</span>
<span class="p">});</span>

<span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class4</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class1</span><span class="p">.</span><span class="nx">Subclass</span><span class="p">({</span>
  <span class="nx">XandY</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">y</span><span class="p">)</span> <span class="p">{</span><span class="k">return</span> <span class="s2">&quot;Class4: &quot;</span><span class="o">+</span><span class="k">this</span><span class="p">.</span><span class="nx">SUPER</span><span class="p">(</span><span class="nx">arguments</span><span class="p">).</span><span class="nx">XandY</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="k">this</span><span class="p">,</span><span class="nx">y</span><span class="p">)}</span>
<span class="p">});</span>

<span class="kd">var</span> <span class="nx">foo</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class2</span><span class="p">(</span><span class="s2">&quot;foo&quot;</span><span class="p">);</span>
<span class="nx">foo</span><span class="p">.</span><span class="nx">XandY</span><span class="p">(</span><span class="s2">&quot;bar&quot;</span><span class="p">);</span>   <span class="c1">// returns &quot;Class2: Class1: x and y = foo and bar&quot;</span>
<span class="kd">var</span> <span class="nx">bar</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class3</span><span class="p">(</span><span class="s2">&quot;bar&quot;</span><span class="p">);</span>
<span class="nx">bar</span><span class="p">.</span><span class="nx">XandY</span><span class="p">(</span><span class="s2">&quot;foo&quot;</span><span class="p">);</span>   <span class="c1">// returns &quot;Class3: Class2: Class1: x and y = bar and foo&quot;</span>
<span class="kd">var</span> <span class="nx">moo</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class4</span><span class="p">(</span><span class="s2">&quot;moo&quot;</span><span class="p">);</span>
<span class="nx">moo</span><span class="p">.</span><span class="nx">XandY</span><span class="p">(</span><span class="s2">&quot;cow&quot;</span><span class="p">);</span>   <span class="c1">// returns &quot;Class4: Class1: x and y = moo and cow&quot;</span>
</pre></div>
</div>
<p>Since both of these mechanisms are rather awkward, MathJax provides an
alternative syntax that is easier on the programmer, but at the cost
of some inefficiency in creating the subclass and in calling methods
that access the super class.</p>
<p>Since most calls to the super class are to the overridden method, not
to some other method, the method name and the <code class="docutils literal"><span class="pre">call()</span></code> are
essentially redundant.  You can get a more convenient syntax by
wrapping the <cite>def</cite> for the <a class="reference internal" href="#Subclass" title="Subclass"><code class="xref py py-meth docutils literal"><span class="pre">Subclass()</span></code></a> call in a call to
<code class="docutils literal"><span class="pre">MathJax.Object.SimpleSUPER()</span></code>, as in the following example:</p>
<div class="highlight-javascript"><div class="highlight"><pre><span></span><span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class1</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nb">Object</span><span class="p">.</span><span class="nx">Subclass</span><span class="p">({</span>
  <span class="nx">Init</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">x</span><span class="p">)</span> <span class="p">{</span><span class="k">this</span><span class="p">.</span><span class="nx">x</span> <span class="o">=</span> <span class="nx">x</span><span class="p">},</span>
  <span class="nx">XandY</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">y</span><span class="p">)</span> <span class="p">{</span><span class="k">return</span> <span class="s2">&quot;Class1: x and y = &quot;</span> <span class="o">+</span> <span class="k">this</span><span class="p">.</span><span class="nx">x</span> <span class="o">+</span> <span class="s2">&quot; and &quot;</span> <span class="o">+</span> <span class="nx">y</span><span class="p">}</span>
<span class="p">});</span>

<span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class2</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class1</span><span class="p">.</span><span class="nx">Subclass</span><span class="p">(</span>
  <span class="nx">MathJax</span><span class="p">.</span><span class="nb">Object</span><span class="p">.</span><span class="nx">SimpleSUPER</span><span class="p">({</span>
    <span class="nx">XandY</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">y</span><span class="p">)</span> <span class="p">{</span><span class="k">return</span> <span class="s2">&quot;Class2: &quot;</span><span class="o">+</span><span class="k">this</span><span class="p">.</span><span class="nx">SUPER</span><span class="p">(</span><span class="nx">y</span><span class="p">)},</span>
    <span class="nx">AnotherMethod</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span><span class="k">return</span> <span class="k">this</span><span class="p">.</span><span class="nx">x</span><span class="p">}</span>              <span class="c1">// it&#39;s OK if a method doesn&#39;t use SUPER</span>
  <span class="p">})</span>
<span class="p">);</span>

<span class="kd">var</span> <span class="nx">foo</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Class2</span><span class="p">(</span><span class="s2">&quot;foo&quot;</span><span class="p">);</span>
<span class="nx">foo</span><span class="p">.</span><span class="nx">XandY</span><span class="p">(</span><span class="s2">&quot;bar&quot;</span><span class="p">);</span>     <span class="c1">// returns &quot;Class2: Class1: x and y = foo and bar&quot;</span>
</pre></div>
</div>
</div>
</div>


           </div>
           <div class="articleComments">
            
           </div>
          </div>
          <footer>
  
    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
      
        <a href="../misc/accessibility-features.html" class="btn btn-neutral float-right" title="Accessibility Features" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
      
      
        <a href="jax.html" class="btn btn-neutral" title="The Base Jax Class" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
      
    </div>
  

  <hr/>

  <div role="contentinfo">
    <p>
        &copy; Copyright 2017 The MathJax Consortium.

    </p>
  </div>
  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 

</footer>

        </div>
      </div>

    </section>

  </div>
  


  

    <script type="text/javascript">
        var DOCUMENTATION_OPTIONS = {
            URL_ROOT:'../',
            VERSION:'2.7',
            COLLAPSE_INDEX:false,
            FILE_SUFFIX:'.html',
            HAS_SOURCE:  true,
            SOURCELINK_SUFFIX: '.txt'
        };
    </script>
      <script type="text/javascript" src="../_static/jquery.js"></script>
      <script type="text/javascript" src="../_static/underscore.js"></script>
      <script type="text/javascript" src="../_static/doctools.js"></script>

  

  
  
    <script type="text/javascript" src="../_static/js/theme.js"></script>
  

  
  
  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.StickyNav.enable();
      });
  </script>
   

</body>
</html>