所以我有一个班级名Session
。
我声明为:
function Session() {
}
我有一个名为Session.prototype.parseCommand(){}
的函数。
出于某种原因,如果我将该函数称为:this.parseCommand()
,则将其声明为未声明。
这也适用于以下功能:this.textInput = false
。在某些功能上,我可以调用它,但在其他功能上它是未定义的。
有什么问题?
function Session() {
this.textInput = null;
this.lineGutter = null;
}
Session.prototype.parseCommand = function(command) {
if (command === 'clear') {
} else {
var line = document.createElement('div');
line.className = 'line';
line.setAttribute('id', 'line command');
line.innerHTML = command;
document.getElementById('sessionLineGutter').appendChild(line);
}
};
Session.prototype.textInputKey = function(e) {
if (e.keyCode === 13) {
this.parseCommand(document.getElementById('sessionText').innerHTML);
e.preventDefault();
}
};
这是完整的代码和错误。我还注意到我无法使用this.lineGutter.appendChild(line);
,而是必须使用document.getElementById('sessionLineGutter').appendChild(line)
。这是为什么?
谢谢,
答案 0 :(得分:1)
当在原型上声明任何方法时,你无法使用它来调用它们 它必须直接通过对象
调用
let words = ["hello", "world!!"]
var res: [String] = []
for word in words {
res += word.components(separatedBy: .punctuationCharacters).filter{!$0.isEmpty}
res += word.components(separatedBy: CharacterSet.punctuationCharacters.inverted).filter{!$0.isEmpty}.joined().characters.map{String($0)}
}
print(res) // ["hello", "world", "!", "!"]
这里指的是窗口(全局)对象
在此代码段中
function session(){
}
session.prototype.method1=function(){
alert("here");
}
var sess1=new session();
sess1.method1();
//this -here refers to window object
这指的是全局(窗口)对象
你可以使用调用parsecommand方法 var session1 = new Session(),可以调用session1.parseCommand 现在在parseCommand中,这将是Session对象,所以这就是你试图访问时的原因 this.lineGutter.appendChild(线);
这不会发生,因为这里它指向Session对象中的lineGutter,但我猜你期望它附加到这里没有发生的身体,因为这是一个对象
这就是你必须document.getElementById('sessionLineGutter')。appendChild(line)
的原因我希望你明白