我来自c#面向对象的背景,并且在javascript中使用类似的原理。我的任何好文章可以帮助我研究吗?
这是我为Product Javascript对象组合的示例:
function Product() {
this.reset = function () {
this.id = 0;
this.name = '';
}
}
Product.prototype = {
loadFromJson: function (json) {
this.reset();
this.id = json.Id;
this.name = json.Name;
},
checkAvailability: function (qty) {
// Just to illustrate
return true;
}
};
所以要创建Product的实例:
var p = new Product();
访问公共方法:
var isAvailable = p.checkAvailability(1);
访问公共财产:
var name = p.name;
复位功能我是否创建了一个有效的私有函数?
我上面所做的是正确的还是有更好的方法?我是新手!
另外,如果我在另一个javascript文件中创建产品实例,我可以对Product对象的属性进行智能化吗?
答案 0 :(得分:1)
重置为this.reset();
,因此它位于对象的范围内,因此可以称为public,但仍保留在该范围内。在您的示例中p.reset();
但reset();
失败。
更好的方法?这取决于某些情况需要这种复杂,有些情况则不然。有很多方法可以实例化对象(一切都是JavaScript中的对象),你的例子就是一些方法。
除非你建立并附属自己(很多工作),否则不会有任何好处。 (搜索jQuery intellisence以了解如何完成)
有关命名空间的更多信息,请参阅此内容。注意内部和公共函数和变量。
var myStuffApp = new function()
{
var internalFunction = function()
{
alert('soy una función interna');
};
this.publicFunction = function()
{
alert('soy una función pública');
};
var test1 = 'testing 1';//private/internal
this.test2 = 'testing 2';// namespaced
testA="ho";// global
};
答案 1 :(得分:1)
我建议您阅读此msdn page以获取基本信息。这就像面向c#的开发人员的速成课程。
答案 2 :(得分:1)
复位功能我是否创建了一个有效的私有函数?
没有。它与prototype
上设置的功能不同,因为reset
的每个实例都会获得Product
的不同副本:
var p1= new Product();
var p2= new Product();
alert(p1.loadFromJson===p2.loadFromJson); // true
alert(p1.reset===p2.reset); // false
但它不是私密的。你仍然可以这样做:
var p= new Product();
p.reset();
虽然可以使用闭包在JavaScript中执行私有函数,但它几乎不值得。考虑使用Python惯例命名所有不希望在实现之外使用的成员使用前面的下划线。
有关JS对象模型的详细讨论,请参阅this question。