<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1632085368384154" crossorigin="anonymous"></script><script src="https://autohotkey.top/gtag.js"></script></head> <body> <h1>Class 对象</h1> <pre class="NoIndent">class Class extends Object</pre> <p><strong>Class(类)</strong> 对象表示一个类定义; 它包含静态方法和属性.</p> <p>每个类对象都<a href="../Objects.htm#Custom_Objects">基于</a>其继承的任何类, 如果没有指定, 则基于 <a href="Object.htm">Object</a>. <code>Object</code> 基于 <code>Class.Prototype</code>, 其又基于 <code>Object.Prototype</code>, 因此类可以从任何这些基对象继承方法和属性.</p> <p>"静态" 方法和属性是类对象本身拥有的任何方法和属性(因此不适用于特定实例), 而类实例的方法和属性则由<a href="#Prototype">原型</a>拥有.</p> <p>下面使用 "ClassObj" 作为任何类对象的占位符, 因为 "Class" 就是类本身. 通常, 使用<a href="../Objects.htm#Custom_Classes">类定义</a>中给出的名称来引用类对象.</p> <h2 id="toc">目录</h2> <ul class="indent"> <li><a href="#Methods">方法</a>: <ul> <li><a href="#Call">Call</a>: 构造类的新实例.</li> </ul> </li> <li><a href="#Properties">属性</a>: <ul> <li><a href="#Prototype">Prototype</a>: 检索或设置对象, 其类的所有实例都基于此.</li> </ul> </li> </ul> <h2 id="Methods">方法</h2> <div class="methodShort" id="Call"><h3>Call</h3> <p>构造类的新实例.</p> <pre class="Syntax">Obj := ClassObj(Params*) Obj := ClassObj.<span class="func">Call</span>(Params*)</pre> <p>静态方法通常从 <a href="Object.htm">Object</a>, <a href="Array.htm">Array</a> 或 <a href="Map.htm">Map</a> 类继承. 它执行以下功能:</p> <ul> <li>分配内存并初始化对象的二进制结构, 这取决于对象的原生类型(例如, 它是数组还是映射, 或者只是一个对象).</li> <li>将新对象的基设置为 <a href="#Prototype">ClassObj.Prototype</a>.</li> <li>如果新对象有 __Init 方法, 则调用它的 __Init 方法. 此方法由类定义自动创建; 它包含类主体中定义的所有实例变量初始化器.</li> <li>如果新对象有 __New 方法, 则调用它的 __New 方法. 所有传递给 Call 的参数都被转发到 __New.</li> <li>返回新对象.</li> </ul> <p>Call 可以被通过定义静态方法(如 <code>static Call()</code>) 在类定义中重写. 这允许修改类或阻止构造新实例.</p> <p>注意, <code>Class()</code>(在这种情况下使用原义的 "Class") 可用于构造基于 <code>Class.Prototype</code> 的新的 Class 对象. 但是, 新对象最初没有 Call 方法, 因为它不是 <a href="Object.htm">Object</a> 的子类. 通过给 <a href="Object.htm#Base">Base</a> 赋值使其成为 Object 的子类, 或 Call 方法重新实现或从其他类中复制. 在使用标准的 Call 方法实例化原型之前, 还必须创建原型并将其赋值给该类.</p> </div> <h2 id="Properties">属性</h2> <div class="methodShort" id="Prototype"><h3>Prototype</h3> <p>检索或设置类的所有实例所基于的对象.</p> <pre class="Syntax">Proto := ClassObj.<span class="func">Prototype</span></pre> <pre class="Syntax">ClassObj.<span class="func">Prototype</span> := Proto</pre> <p>默认情况下, 类的原型包含类定义中定义的所有实例方法和动态属性, 可用于检索对方法, 或 getters/setters 属性的引用, 或定义一个新的. 脚本还可以定义新的值属性, 这些值充当所有实例的默认属性值.</p> <p>类的 Prototype 通常基于其基类的 Prototype, 所以 <code>ClassObj.Prototype.base == ClassObj.base.Prototype</code>.</p> <p>原型自动被定义为类定义创建的任何类对象的自身属性.</p> </div> <a href="https://dftg.net">dftg</a><!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "d5a9c4fcb9b6482fa53ce820d892f969"}'></script><!-- Cloudflare Pages Analytics --><script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"rayId":"93c3141fecd1aca8","version":"2025.4.0-1-g37f21b1","r":1,"serverTiming":{"name":{"cfExtPri":true,"cfL4":true,"cfSpeedBrain":true,"cfCacheStatus":true}},"token":"51750bb5dc4f40cc91a5ec55c63bbc01","b":1}' crossorigin="anonymous"></script> </body> </html>