This commit is contained in:
Jeff Posnick 2015-08-31 15:32:44 -04:00
Родитель e98437a4d0
Коммит 8b2c2cbcd4
2 изменённых файлов: 56 добавлений и 0 удалений

5
new-target-es6/README.md Executable file
Просмотреть файл

@ -0,0 +1,5 @@
new.target Sample
===
See https://googlechrome.github.io/samples/new-target-es6/index.html for a live demo.
Learn more at https://www.chromestatus.com/feature/5210159227863040

51
new-target-es6/index.html Executable file
Просмотреть файл

@ -0,0 +1,51 @@
---
feature_name: new.target
chrome_version: 46
feature_id: 5210159227863040
---
<h3>Background</h3>
<p>
The <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-meta-properties-runtime-semantics-evaluation"><code>new.target</code></a>
value is part of the ES2015 (formerly known as ES6) specification, and can take one of two values:
</p>
<ul>
<li>
Inside of a constructor, <code>new.target</code> is set to a reference to the constructor that
was used when calling <code>new</code>.
</li>
<li>
Inside of a normal function, <code>new.target</code> is set to <code>undefined</code>.
</li>
</ul>
<p>
<code>new.target</code> is useful for distinguishing at runtime whether code is being executed as
a constructor or as a function. It is also handy as a way to determine to the specific subclass
that was used with <code>new</code> from within a superclass constructor.
</p>
{% include output_helper.html %}
{% capture js %}
class Parent {
constructor() {
// new.target is a constructor reference, and new.target.name is human-friendly name.
ChromeSamples.log('Hello from Parent! I was constructed via new ' + new.target.name + '()');
}
}
class FirstChild extends Parent {}
class SecondChild extends Parent {}
function notAConstructor() {
ChromeSamples.log('Hello from notAConstructor()! My new.target ' + new.target);
}
// Call all the constructors and the function when the page loads.
new Parent();
new FirstChild();
new SecondChild();
notAConstructor();
{% endcapture %}
{% include js_snippet.html js=js %}