我正在使用javascript数据结构进行一些练习,并且实质上是在尝试扩展Array。
class Collection {
constructor(array){
let collection = Object.create(Array.prototype);
collection = (Array.apply(collection, array) || collection);
collection.clear = () => {
while(this.length > 0){
this.pop();
}
return this
};
return(collection);
}; }
问题是当我执行以下操作
c = new Collection([1,2,3]);
c.clear();
我期望c
时, [1,2,3]
仍然是[ ]
。为什么修改this
不修改c
?
答案 0 :(得分:2)
为什么修改此内容不会修改c?
因为import bs4
import requests
for page_number in range(1, 411):
print("-" * 35, page_number, "-" * 35)
resp = requests.get("https://www.pealim.com/dict/?page={}".format(page_number))
soup = bs4.BeautifulSoup(resp.text, "html.parser")
table_elem = soup.find("tbody")
rows = table_elem.find_all("tr")
for row in rows:
hebrew = row.find("span", class_="menukad").get_text()
latin = row.find("span", class_="dict-transcription").get_text()
print("{}: {}".format(hebrew, latin))
引用了您用this
创建的Collection
的实例,而构造函数返回了new Collection(...)
的值;在这种情况下不是let collection
。
此外,您的代码十分有趣。我认为这就是您要构建的:
this
答案 1 :(得分:0)
这是定义函数的方式。 当您重新定义为lamda表达式时,此值未正确绑定。 更改为普通函数声明。
class Collection {
constructor(array){
let collection = Object.create(Array.prototype);
collection = (Array.apply(collection, array) || collection);
debugger;
collection.clear = function() {
while(this.length > 0){
this.pop();
}
return this
};
return(collection);
}; }
var c = new Collection([1,2,3]);
c.clear();
console.log(c);