我是具有传统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);
结果仍然相同。有什么解释吗?
答案 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.
答案 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>