建筑商内部的公共与私人财产
Public vs Private Properties Inside Constructors
我发现了类似的问题,但没有明确回答,所以我希望有人能帮我解决这个问题。
关于构造函数,我试图弄清楚变量和函数在默认情况下是公共的还是私有的
例如,我有一个具有以下属性的示例构造函数:
function Obj() {
this.type = 'object';
this.questions = 27;
this.print = function() {
console.log('hello world');
}
}
我可以这样称呼这些属性:
var box = new Obj();
box.type; // 'object'
box.print(); // 'hello world'
在我看来,函数和变量在默认情况下都是公共的。是这样吗?或者,如果构造函数内部的函数是私有的。。。他们只能将私有变量作为参数吗
谢谢。
Javascript中实例上的所有属性(用this.property = xxx
分配的东西)都是公共的,无论它们是在构造函数中还是在其他地方分配的。
如果使用Object.defineProperty()
,给定的属性可能是只读的,也可能是getter或setter,但它们对外部世界都是可见的。
Javascript没有用于"私有"属性的内置语言功能。您可以将构造函数中的局部变量或局部函数用作私有函数,但它们仅可用于构造函数中定义的代码或方法。
因此,在您的示例中:
function Obj() {
this.type = 'object';
this.questions = 27;
this.print = function() {
console.log('hello world');
}
}
所有属性type
、questions
和print
都是可公开访问的。
创建"私有"方法的一种技术是在构造函数中定义一个本地函数,如下所示:
function Obj() {
var self = this;
// this is private - can only be called from within code defined in the constructor
function doSomethingPrivate(x) {
console.log(self.type);
}
this.type = 'object';
this.questions = 27;
this.print = function(x) {
doSomethingPrivate(x);
}
}
以下是关于使用构造函数闭包创建私有访问的一个更常见的引用:http://javascript.crockford.com/private.html.
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调用函数内部的函数
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 在phonegap应用程序内部重定向不起作用
- 使用此选项选择父类内部的类
- 访问JSON对象内部的数组元素
- 从模块内部访问Express装载路径
- AngularJs指令,该指令创建内部有数据对象的新指令
- 如何使用内部对象构造对象
- 根据选项卡内部的文本链接中的哈希ID动态选择jqueryUI选项卡
- 用Javascript修改内部标记的CSS规则
- javascript函数内部的代码用逗号而不是分号分隔
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 光线投射从内部投射时不会碰到网格
- javascript无法重新定义函数内部的全局对象
- 在不移动内部文本的情况下缩放元素的效果
- cordova:例外:财产'requestFileSystem'的[对象全局]不是函数
- JavaScript goto 标签如何使用内部循环
- 访问Javascript对象's的财产内部分离
- 建筑商内部的公共与私人财产