小编Sle*_*v7n的帖子

如何检查对象的属性是 getter 还是 setter?

我想知道 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 的结果相同。

这让我想到一个问题。有没有办法确定一个属性是否是访问器?

javascript getter properties object accessor

3
推荐指数
1
解决办法
1616
查看次数

Javascript深度继承和超级构造函数

我试图弄清楚 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)

注意:隐藏属性 …

javascript constructor extends super

3
推荐指数
1
解决办法
183
查看次数

为什么我们不能立即调用函数声明?

为什么我们需要编写一个计算结果为函数类型的表达式才能立即调用函数?为什么我们不能只声明一个函数并立即调用它?

为什么

(function(){}()) or !function(){}()
Run Code Online (Sandbox Code Playgroud)

为什么不只是

function(){}()
Run Code Online (Sandbox Code Playgroud)

我想这与如何将这些内容存储在内存中有关,但是我很难找到一个完整的答案。

javascript expression function

1
推荐指数
1
解决办法
41
查看次数