我想知道 HTML 元素的 textContent 属性是否是一个 getter,它递归地搜索节点以查找文本节点。
我做了一个实验:
Object.defineProperty(HTMLElement.prototype, 'textContentMyOwnImplementation', {
get() {
const result = [];
function search(node) {
if(node.nodeName == '#text')
result.push(node.data);
else
for(let i = 0; i < node.childNodes.length; i++) {
search(node.childNodes[i]);
}
}
search(this);
return result.join(' ');
}
})Run Code Online (Sandbox Code Playgroud)
结果与textContent 的结果相同。
这让我想到一个问题。有没有办法确定一个属性是否是访问器?
我试图弄清楚 super 在 JavaScript 中是如何工作的。我有一个想法,但我不确定它的准确性,所以我需要一些帮助。
class A {
}
class B extends A {
constructor() {
super();
}
}
class C extends B {
constructor() {
super();
}
}
new C
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,“new”运算符创建一个对象并将其链接到构造函数 C 的原型,构造函数 C 的隐藏属性“thisArg”现在指向新创建的对象
+---------------------+
| function object |
+---------------------+
| - code |
+---------------------+
| - outerScope |
+---------------------+
| - thisArg |
+---------------------+
| - [[Prototype]] |
+---------------------+
| + prototype |
+---------------------+
| + length |
+---------------------+
| + name |
+---------------------+
Run Code Online (Sandbox Code Playgroud)
注意:隐藏属性 …
为什么我们需要编写一个计算结果为函数类型的表达式才能立即调用函数?为什么我们不能只声明一个函数并立即调用它?
为什么
(function(){}()) or !function(){}()
Run Code Online (Sandbox Code Playgroud)
为什么不只是
function(){}()
Run Code Online (Sandbox Code Playgroud)
我想这与如何将这些内容存储在内存中有关,但是我很难找到一个完整的答案。
javascript ×3
accessor ×1
constructor ×1
expression ×1
extends ×1
function ×1
getter ×1
object ×1
properties ×1
super ×1