在 JavaScript 中创建私有属性
本文将解释 ES6 类、使用 ES6 类的私有属性,以及如何在 JavaScript 中创建和声明这些私有属性。此外,讨论和解释了在 JavaScript 中实现 private
关键字的不同方法。
JavaScript 中的 ES6 类
面向对象是一种基于现实世界建模的编程范式。它将程序视为通过方法进行通信的对象的集合。
ES6 也支持这些面向对象的组件。
在 ES6 中,class
关键字可用于构建类。声明类或利用类表达式可用于将它们包含在代码中。
语法:
class Class_name {}
// declaring a class
var var_name = new Class_name {}
// class expression
JavaScript 中的公共属性
关键字 this
在 JavaScript 中声明公共属性和方法。它们可以在指定函数的内部和外部访问。
JavaScript 中的私有属性
在面向对象的语言中,private
关键字是一个访问修饰符,它限制对指定类中的属性和方法的访问。这使得隐藏应该被窥探而不是在教室外参与的潜在逻辑变得简单。
但是,使用 JavaScript,你怎么能达到同样的效果呢?private
不是保留关键字;相反,它只能用作变量。
语法:
const private = 'private';
private.js
// private is not a reserved keyword, and you can set it to anything.
在 JavaScript 中创建私有属性的不同方法
幸运的是,有一些解决方案可以在 JavaScript 中实现私有属性和函数。实现私有属性的方法如下:
在 JavaScript 中使用 closure()
创建私有属性
使用 closure()
是在 JavaScript 中实现私有属性的选择之一。可以访问周围函数变量的内部函数称为闭包。
例子:
(function one() {
var a = 'Hello World';
// The scope of the outer function is accessible to this inner function.
(function two() {
console.log(a); // This will give output of "Hello World"
})();
})();
输出:
你可以访问此链接以查看此代码的工作情况。这意味着将变量分配给最顶层的自调用函数调用,并且仅通过函数返回公开其内部函数的一部分。
在 JavaScript 中使用 ES6 类创建私有属性
ES6 类本身不支持私有属性。但是,你可以通过将新属性放在类函数 Object() { [native code] }
中来获得类似的效果。我们可以利用 getter 和 setter 来访问隐藏的属性,而不是将它们附加到对象上。
值得注意的是,该类的每个新实例都重新定义了 getter 和 setter。你可以利用 ES6 中引入的 class
关键字来使你的代码更类似于 OOP 方法。
在你的类之外声明属性和方法以使它们成为私有的。
例子:
class Person {
constructor(name) {
var _name = name this.setName = function(name) {
_name = name;
} this.getName = function() {
return _name;
}
}
}
在 JavaScript 中使用最新的 ECMAScript 提案创建私有属性
以后也许可以使用官方的方式使用私有字段。目前,这是在撰写本文时的第 3 阶段提案。
有了今天最新版本的 Babel,你已经可以使用它了。要定义私有属性或方法,请在它们前面加上一个哈希。
例子:
class Something {
#property;
constructor() {
this.#property = 'test';
}
#privateMethod() {
return 'hello world';
}
getPrivateMessage() {
return this.#property;
}
}
const instance = new Something();
console.log(instance.property); // It will show "undefined"
console.log(instance.privateMethod); // This will show "undefined"
console.log(instance.getPrivateMessage()); // This will show "test"
你可以点击这个链接来观看上面代码段的执行。
在 JavaScript 中从私有属性访问公共属性
你必须明白,这是一个 MODULE,而不是一个需要实例化的类。要从私有属性访问公共属性,请使用 self.
在公共方法/变量中,在私有方法中没有任何内容,它都会起作用。
例子:
var PersonModule = (function() {
var self = {};
var privateChangeNameToBob = function() {
self.name = 'World';
};
self.sayHello = function() {
console.log('Hello ' + self.name);
};
self.changeName = function() {
privateChangeNameToBob();
};
self.name = '';
return self;
})();
PersonModule.name = 'Test';
PersonModule.changeName();
PersonModule.sayHello();
输出:
单击此链接以访问此代码的执行。