1
我有一个解析关键字的特定对象属性的脚本,然后将这些关键字和另一个属性追加到对象中。新的属性值将打印到文档以进行错误检查。使用类/构造函数与变量方法时的不同作用域
var chemistry = {
field: "chemistry",
keywords: [
"atom",
"proton",
"electron",
"wavefunction",
"neutron",
"catalyst"],
filter: function(title) {
var i;
for(i = 0 ; i < title.split(" ").length; i++) {
var title_part = title.toLowerCase().split(" ")[ i ];
var j;
for(j = 0 ; j < this.keywords.length; j++) {
if (this.keywords[ j ] == title_part && library[ 0 ].keywords.indexOf(this.keywords[ j ]) == -1) {
library[ 0 ].keywords.push(this.keywords[ j ]);
if (library[ 0 ].field.indexOf(this.field) == -1) {
library[ 0 ].field.push(this.field);
};
};
};
};
}
};
chemistry.filter(library[0].title);
document.writeln("KEYWORDS: " + library[0].keywords);
document.writeln("FIELD: " + library[0].field);
这工作正常,但我想创建一个类,它构造一个新的对象,如上所示。下面是我使用
"use strict"
class Discipline {
constructor(field, keyword) {
this.field = field;
this.keywords = keyword;
this.filter = function(title) {
var i;
for(i = 0 ; i < title.split(" ").length; i++) {
var title_part = title.toLowerCase().split(" ")[ i ];
var j;
for(j = 0 ; j < this.keywords.length; j++) {
if (this.keywords[ j ] == title_part && library[ 0 ].keywords.indexOf(this.keywords[ j ]) == -1) {
library[ 0 ].keywords.push(this.keywords[ j ]);
if (library[ 0 ].field.indexOf(this.field) == -1) {
library[ 0 ].field.push(this.field);
};
};
};
};
}
}
};
var chemistry = new Discipline("chemistry", "electron");
chemistry.filter(library[0].title);
document.writeln("KEYWORDS: " + library[0].keywords);
document.writeln("FIELD: " + library[0].field);
过滤器似乎不输出任何东西,我只是看到代码“关键词:字段:”在文档中。令人困惑的是,如果使用document.writeln()检查library [0] .field和library [0] .keywords,我会得到期望的值。
我想知道“这个”的范围。当我使用类构造函数时会发生变化。或者还在发生其他事情?另外,如果有人知道传递数组作为关键字参数的好方法,那将是非常值得赞赏的。现在我传递一个间隔的字符串并将其分开。
所以当'var chemistry = new Discipline(“chemistry”,“electron”);'runs,这是什么。指的是? – Amotttier
在构造函数(字段,关键字){}'部分中,'this'指向那个函数。然后,当你进入'that.filter = function(title){}',那么'this'现在指的是你所在的新函数。 – millerbr
我更新了代码,但我仍然没有得到预期的结果https://jsfiddle.net/jo3ghoLm/ – Amotttier