语法高亮,滚动条美化,设置页面调整

This commit is contained in:
fofolee
2019-04-19 02:41:09 +08:00
parent 1e8f76c000
commit 359d29ee0b
1590 changed files with 12328 additions and 11441 deletions

View File

@@ -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">