在Javascript构造函数中定义属性的正确方法
所以我对JavaScript(来自强大的java背景)不熟悉,我想知道在类或构造函数中定义属性或变量的正确方法。在Javascript构造函数中定义属性的正确方法
function RootNode(sTitle, authName, storyNum){
this.sTitle = sTitle;
this.authName = authName;
this.storyNum = storyNum;
this.creationDate = new Date();
}
或
function RootNode(sTitle, authName, storyNum){
var sTitle = sTitle;
var authName = authName;
var storyNum = storyNum;
var creationDate = new Date();
}
答案很简单:使用第一个
更详细的解答
的第一个片段设置sTitle
, authName
,storyNum
和creationDate
属性。
第二个片段创建4个局部变量并设置它们的值。这些变量在函数外部是不可访问的。
可以使用局部变量和对象变量一起这样的:
function RootNode(sTitle, authName, storyNum) {
this.sTitle = sTitle; // you can access this variable when you . into the object
var privateVariable = 'You cannot see this variable when you . into the object directly';
this.methodInObject = function() {
return privateVariable; // but you can access the variable from the function
}
}
注:你可能想在构造函数的末尾添加return this;
,使其返回对象你构建的。
UPDATE:%的评论,你做不必须return this;
为使用new RootNode
这是否自动将
进一步阅读(+1使用自动的:)?)
可以使用的第一个样式,但我个人比较喜欢这样的:http://www.w3schools.com/js/js_objects.asp
我认为OP正试图以“伪古典”的方式使用JS。 – 2015-03-03 02:55:25
w3schools ...那些可怕的人... – Travis 2015-03-03 02:58:20
@jsve“伪古典”庄园会是什么?来自java和c的强大背景是否有一种不同的方法,我应该给予javascript的观点? – crazyCoder 2015-03-03 02:58:39
第一种方式是正确的。
function RootNode(sTitle, authName, storyNum) {
this.sTitle = sTitle;
this.authName = authName;
this.storyNum = storyNum;
this.creationDate = new Date();
}
然而,这种方法不是很喜欢的一类,它更多的是独特的对象。以这种方式定义对象更像是一个Java类。
function RootNode(sTitle, authName, storyNum) {
//your constructor
this.sTitle = sTitle;
this.authName = authName;
this.storyNum = storyNum;
this.creationDate = new Date();
}
RootNode.prototype.myMethod = function() {
//my code
}
这种模式很有用,因为它允许多个实例化,而不需要为属性复制内存。另外,如果你想创建子类,这是必要的。阅读this了解原型和构造函数属性
为什么'var RootNode = function'比直接函数声明更好?这实际上更糟,因为构造函数是未命名的。用你提出的构造,'RootNode.name'将返回空字符串。 – plalx 2015-03-03 03:20:58
这是一个很好的观点。我的重点是原型。我会编辑它。 – 2015-03-03 03:23:16
#1。在#2中创建局部变量。 – 2015-03-03 02:53:44
JavaScript中没有类(至少尚未)。 – 2015-03-03 02:54:28
当有,我不会使用它们。 https://www.youtube.com/watch?v=PSGEjv3Tqo0 – m59 2015-03-03 02:55:10