关于JavaScript原型

时间:2016-08-19 09:40:11

标签: javascript prototype

我正在学习javascript原型,但我遇到了一个问题。

filter { 
    grok {
        match => {
        "message"=> 
            "tag: %{GREEDYDATA:tag} message: %{GREEDYDATA:message} value: %{WORD:value}"
        }
    }

    if "_grokparsefailure" in [tags] {
        json {
            source => message
        }
    }
}

为什么它返回2个结果。" bb"和undefined?

2 个答案:

答案 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();