在Javascript构造函数中定义属性的正确方式
Proper way to define properties in a Javascript contructor
所以我是javascript的新手(来自强大的java背景),我想知道在类或构造函数中定义属性或变量的正确方法。
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;
,以便它返回您构建的对象
更新:根据注释,您不必使用return this;
,因为使用new RootNode
会自动完成(+1表示使用自动?:))
进一步阅读
- MDN中的面向对象JavaScript简介
- 伪古典模式
- JavaScript继承:伪经典与原型
您可以使用第一种样式,但我个人更喜欢这样:http://www.w3schools.com/js/js_objects.asp
第一种方法是正确的。
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
}
这种模式非常有用,因为它允许多次实例化,而不会复制属性的内存。此外,如果您想要创建子类,这也是必要的。阅读本文以了解原型和构造函数属性
相关文章:
- 为Google闭包类定义属性的首选方式是什么
- 向插件添加属性(不是默认方式)
- 使用 onChange 属性以内联方式更改复选框的值
- 为什么某些Javascript属性没有在调试器中以交互方式显示
- 在Javascript构造函数中定义属性的正确方式
- 如何生成一个正则表达式,用以这种方式命名的类的属性值替换标记{{name}}
- 以编程方式为传单地图上的标记提供数据属性
- BackboneJS重新排列集合中模型的最佳方式,同时为每个模型维护0索引的有序属性
- 复制元素的最佳方式是:只复制元素的类型和属性
- 如何以编程方式获取属性Id、视图Id和帐户Id
- 如何以编程方式展开/折叠属性
- 使用方法和属性定义javascript对象的最佳方法是什么?(如果可能以本机方式)
- 下划线/洛达什号中的快捷方式,用于(递归)设置对象的所有属性
- 两个 JavaScript 对象具有相同的属性实现方式,但原型不同
- JavaScript 中通过公共属性“交叉”两个 JSON 对象数组的最佳方式
- Drupal 7 Field API:如何以编程方式发送表单元素属性 #ajax 指定的AJAX请求
- 无法设置未定义的 - 以编程方式创建的元素的属性 X
- 在循环或以其他方式动态创建 JSON 对象中的属性
- 更改属性 Javascript 方式的值
- jQuery -通过自定义的CSS键来查找元素的最佳方式.属性