从对象访问属性/方法(javascript)

时间:2014-04-07 06:25:42

标签: javascript oop

我是具有传统OOP知识的典型Java程序员。我现在正在努力学习JS。我已经了解到一个函数是JS是一个第一类对象,就像它拥有属性和方法的任何其他对象一样。基于此,我写了以下代码:

function Note(name, text)
{
    this.name = name;
    this.text = text;

   function displayNote()
    {
       alert(this.text);
    }
}

我现在尝试从非对象访问displayNote函数,使用以下代码:

var note = new Note("a", "c");
alert(note.displayNote);

但它警告未定义。这可能是由于范围问题。所以我尝试了这个:

function Note(name, text)
{
    this.name = name;
    this.text = text;

   function displayNote()
    {
       var self = this;
       alert(self.text);
    }
}

var note = new Note("a", "c");
alert(note.displayNote);

结果仍然相同。有什么解释吗?

4 个答案:

答案 0 :(得分:2)

你需要这样做:

function Note(name, text)
{
    this.name = name;
    this.text = text;

    this.displayNote = function()
    {
       alert(this.text);
    }
}

它显示未定义,因为您尚未定义displayNote属性。

此外,要调用您需要执行的功能:

var note = new Note("a", "c");
note.displayNote();// it will automatically alert. Otherwise you'll have two alerts. The second one being undefined.

Live Demo

答案 1 :(得分:1)

试试这个。

this.displayNote = function()
{
   alert(this.text);
}

现在它是Note对象的属性。另外我想你想这样做:

note.displayNote(); // Note the brackets to call.

答案 2 :(得分:0)

这里的代码为

alert(note.displayNote);

您正在拨打警报两次。

所以请调用函数

note.displayNote();

答案 3 :(得分:0)

你可以使用如下

<script language="javascript" type="text/javascript">
<!--

person = new Object()
person.name = "Tim Scarfe"
person.height = "6Ft"

person.run = function() {
    this.state = "running"
    this.speed = "4ms^-1"
}

//-->
</script>