我正在学习javascript原型,但我遇到了一个问题。
filter {
grok {
match => {
"message"=>
"tag: %{GREEDYDATA:tag} message: %{GREEDYDATA:message} value: %{WORD:value}"
}
}
if "_grokparsefailure" in [tags] {
json {
source => message
}
}
}
为什么它返回2个结果。" bb"和undefined?
答案 0 :(得分:0)
这是因为你创造了人的对象并且你正在设置 的 将属性命名为" bb"并且在函数中你正在警告sayname不是属性,它是一个函数
详细解释: 这是你的工厂对象,即你的函数定义
function Person(){}
Person.prototype.name="aa";
Person.prototype.sayName=function(){
alert(this.name);
}
现在您创建一个对象实例以使用其属性和功能
var per = new Person();
现在使用per可以覆盖该属性,或者可以调用函数
per.name = "bb";
上面的代码将设置属性名称==" bb"因此,在警报中,您将获得bb访问sayName,您应该使用
per.sayName();
这将为您提供输出" bb"
进入sayName函数,警报将给出bb,因为这引用了对象,然后它将查找property.name
答案 1 :(得分:0)
这与原型和属性无关,一切都按预期工作。问题是person1.sayName()
没有return
任何内容,因此隐式会返回undefined
,而alert(…)
会打印出来的内容
您只需要一个提醒,因此您应该使用
Person.prototype.sayName = function() {
return this.name;
};
…
alert(person1.sayName());
或
Person.prototype.sayName = function() {
alert(this.name);
};
…
person1.sayName();