mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2026-02-27 17:44:35 +08:00
语法高亮,滚动条美化,设置页面调整
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
<div><iframe class="interactive interactive-js" frameborder="0" height="250" src="https://interactive-examples.mdn.mozilla.net/pages/js/expressions-instanceof.html" width="100%"></iframe></div>
|
||||
<p class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a class="external" href="https://github.com/mdn/interactive-examples" rel="noopener">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
|
||||
<h2 id="Syntax" name="Syntax">语法</h2>
|
||||
<pre><code><em>object</em> instanceof <em>constructor</em></code></pre>
|
||||
<pre><code><em>object</em> instanceof <em>constructor</em></code></code></pre>
|
||||
<h3 id="Parameters" name="Parameters">参数</h3>
|
||||
<dl>
|
||||
<dt><code>object</code></dt>
|
||||
@@ -16,7 +16,7 @@
|
||||
</dl>
|
||||
<h2 id="Description" name="Description">描述</h2>
|
||||
<p><code>instanceof </code>运算符用来检测 <code>constructor.prototype </code>是否存在于参数 <code>object</code> 的原型链上。</p>
|
||||
<pre class="brush: js">// 定义构造函数
|
||||
<pre><code class="language-javascript">// 定义构造函数
|
||||
function C(){}
|
||||
function D(){}
|
||||
|
||||
@@ -42,7 +42,7 @@ D.prototype = new C(); // 继承
|
||||
var o3 = new D();
|
||||
o3 instanceof D; // true
|
||||
o3 instanceof C; // true 因为C.prototype现在在o3的原型链上
|
||||
</pre>
|
||||
</code></pre>
|
||||
<p>需要注意的是,如果表达式 <code>obj instanceof Foo</code> 返回<code>true</code>,则并不意味着该表达式会永远返回<code>true</code>,因为<code>Foo.prototype</code>属性的值有可能会改变,改变之后的值很有可能不存在于<code>obj</code>的原型链上,这时原表达式的值就会成为<code>false</code>。另外一种情况下,原表达式的值也会改变,就是改变对象<code>obj</code>的原型链的情况,虽然在目前的ES规范中,我们只能读取对象的原型而不能改变它,但借助于非标准的<code>__proto__</code>伪属性,是可以实现的。比如执行<code>obj.__proto__ = {}</code>之后,<code>obj instanceof Foo</code>就会返回<code>false</code>了。</p>
|
||||
<h3 id="instanceof和多全局对象(多个frame或多个window之间的交互)"><code>instanceof</code>和多全局对象(多个frame或多个window之间的交互)</h3>
|
||||
<p>在浏览器中,我们的脚本可能需要在多个窗口之间进行交互。多个窗口意味着多个全局环境,不同的全局环境拥有不同的全局对象,从而拥有不同的内置类型构造函数。这可能会引发一些问题。比如,表达式 <code>[] instanceof window.frames[0].Array</code> 会返回<code>false</code>,因为 <code>Array.prototype !== window.frames[0].Array.prototype</code>,并且数组从前者继承。</p>
|
||||
@@ -54,7 +54,7 @@ o3 instanceof C; // true 因为C.prototype现在在o3的原型链上
|
||||
<h3 id="Example:_Demonstrating_that_String_and_Date_are_of_type_Object" name="Example:_Demonstrating_that_String_and_Date_are_of_type_Object">演示<code>String</code>对象和<code>Date</code>对象都属于<code>Object</code>类型和一些特殊情况</h3>
|
||||
<p>下面的代码使用了<code>instanceof</code>来证明:<code>String和</code><code>Date</code>对象同时也属于<code>Object</code>类型(他们是由<code>Object</code>类派生出来的)。</p>
|
||||
<p>但是,使用对象文字符号创建的对象在这里是一个例外:虽然原型未定义,但instanceof Object返回true。</p>
|
||||
<pre class="brush: js"><code>var simpleStr = "This is a simple string";
|
||||
<pre><code class="language-javascript"><code>var simpleStr = "This is a simple string";
|
||||
var myString = new String();
|
||||
var newStr = new String("String created with constructor");
|
||||
var myDate = new Date();
|
||||
@@ -74,10 +74,10 @@ myString instanceof Date; //返回 false
|
||||
|
||||
myDate instanceof Date; // 返回 true
|
||||
myDate instanceof Object; // 返回 true
|
||||
myDate instanceof String; // 返回 false</code></pre>
|
||||
myDate instanceof String; // 返回 false</code></code></pre>
|
||||
<h3 id="Example:_Demonstrating_that_mycar_is_of_type_Car_and_type_Object" name="Example:_Demonstrating_that_mycar_is_of_type_Car_and_type_Object">演示<code>mycar</code>属于<code>Car</code>类型的同时又属于<code>Object</code>类型</h3>
|
||||
<p>下面的代码创建了一个类型<code>Car</code>,以及该类型的对象实例<code>mycar</code>. <code>instanceof</code>运算符表明了这个<code>mycar</code>对象既属于<code>Car</code>类型,又属于<code>Object</code>类型。</p>
|
||||
<pre class="brush: js">function Car(make, model, year) {
|
||||
<pre><code class="language-javascript">function Car(make, model, year) {
|
||||
this.make = make;
|
||||
this.model = model;
|
||||
this.year = year;
|
||||
@@ -86,14 +86,14 @@ var mycar = new Car("Honda", "Accord", 1998);
|
||||
var a = mycar instanceof Car; // 返回 true
|
||||
var b = mycar instanceof Object; // 返回 true
|
||||
|
||||
</pre>
|
||||
</code></pre>
|
||||
<h3 id="不是一个实例">不是一个实例</h3>
|
||||
<p>要测试对象是否不是特定构造函数的实例,你可以这样做</p>
|
||||
<pre><code>if (!(mycar instanceof Car)) {
|
||||
// Do something, like mycar = new Car(mycar)
|
||||
}</code></pre>
|
||||
}</code></code></pre>
|
||||
<p>下面代码完全不同</p>
|
||||
<pre><code>if (!mycar instanceof Car)</code></pre>
|
||||
<pre><code>if (!mycar instanceof Car)</code></code></pre>
|
||||
<p>这将永远是假的(<code>!mycar</code>将在<code>instanceof</code>之前被处理,所以你总是验证布尔值是否是Car的一个实例)。</p>
|
||||
<h2 id="规范">规范</h2>
|
||||
<table class="standard-table">
|
||||
|
||||
Reference in New Issue
Block a user