声明:纯属自己翻着玩的!,
javascript的根本是对象,Arrays是对象,Functions是对象,Objects是对象,一切都是对象,那么对象是什么呢?对象是名
-值对的集合,名就是string ,值是string,numbers,booleans,和objects(包括arrays和functions),对象通常被实现的和hashtables一样,值可以很快被取回,
如果值是一个函数,我们可以认为它是一个方法,当一个对象的方法被调用时,this关键字被指向这个对象,随后这个方法
能通过this访问这个实例,对象通过构造函数创建,构造函数是一个实例化对象的方法,在其它语言中类提供这个构造对象的特征,包括static variables and methods.
Public
一个对象的所有成员都是public的,任何函数都能访问、修改、删除这些成员,并且也可以增加新的成员,有两种主要方法
来把一个成员对到一个新的对象中。
用构造函数(In the constructor)
这种技术通常被用来实例化公共的实例变量,这种变量的构造
方法是被用来增加成员到这个对象,
function Container(param) {
this.member = param;
}
这样我们可以创建一个新的对象:
var myContainer=new Container('abc');
这时候,myContainer.member就被赋值为'abc'
用propotype
这种技术通常被用来增加公共的方法,当一个成员没有在这个对象中被发现时,那么它会被这个对象的constructor的
prototype捕获。原型机制是被用来实现继承的,It also conserves memory,通过为这个构造函数的propotype属性增加
一个函数,可以给所有的通过构造函数创建的对象增加一个方法,
Container.prototype.stamp = function (string) {
return this.member + string;
}
然后,我们就可以调用这个方法了:
myContainer.stamp('def')
Private
private属性可以通过构造函数创建,正如我们所想的,这个构造函数的所有参数和变量自动就是private属性
function Container(param) {
this.member = param;
var secret = 3;
var that = this;
}
这个构造函数创建了三个private 变量 param、secret、和that,它们被依附到一个对象上,并且在这个对象的作用域外不可以访问,这个对象的public方法也不能访问它们,不过它们可以被private方法访问(private方法是这个对象的内联方法
(inner functions))
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
}
private函数检查secret这个变量的值,如果它大于0,它就把这个值减1并返回true,否则就返回false,它可以用来限制这
个的只能使用三次,
作为惯例,我创建一个private的that属性,这是为了让这个private方法可以访问到这个对象,This is a workaround for
an error in the ECMAScript Language Specification which causes this to be set incorrectly for inner functions.
private方法不能被public方法调用,为了使这个私有方法有用,我们需要介绍一种特殊的方法,
Privileged
一个privileged方法是一个可以访问private变量和方法,同时自身对public方法是可见的,删除和替换一个privileged方法
是完全可能的,但修改它是完全不可能,或者强迫它放弃它的
secrets
privileged方法被到构造函数中,
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
this.service = function () {
if (dec()) {
return that.member;
} else {
return null;
}
};
}
service是一个privileged方法,调用myContainer.service()的前三次将返回'abc',随后返回的就是null,service调用能
访问private属性secret的private方法dec,serivce对于其它对象和方法是可见的,但它是不允许直接访问私有的属性
Closures(闭包)
通过闭包实现public、private的模式是完全可能的,闭包的意思是只一个内联函数可以访问它的外部函数的变量,即使外部
函数返回以后。这是这种语言极其强大的功能,现在大部分javascript书都没有说这个怎么用,甚至都没有提到,
分享到:
相关推荐
压缩包内文档名如下: Core JavaScript 1.5 Guide Javascript面向对象 ...Private Members in JavaScript prototype手册 深入理解JavaScript闭包 悟透javascript(很好) 详解Javascript 中的this指针
在探讨JavaScript编程中,公共(public)、私有(private)和特权(privileged)模式是面向对象编程中用于管理对象内部成员的重要概念。JavaScript虽然是基于原型的语言,但它同样可以实现类似面向对象语言中的封装...
1. 为何使用私有成员(Private Members) 私有成员的主要目的是限制对对象内部状态的访问。这在以下场景中尤为重要: - **数据安全性**:防止外部代码意外或恶意地改变对象的状态。 - **封装**:隐藏实现细节,...
// Everything returned in the object literal is public, but can access the members in the closure created above. return { // Public method. stringToArray: function(str, delimiter, stripWS) { if ...
例如,它无法实现私有成员(private members),因为所有的属性和方法最终都会暴露给子类。此外,虽然可以模拟静态方法和属性,但它们并不是真正意义上的静态,因为它们实际上是绑定到构造函数而不是类本身。 ES6...
安装 npm install docme用法 docme <readme> <docme> -- <jsdoc> Generates jsdocs for non-private members of the project in the current folder. It then updates the given README with the githubified ...
String sql = "INSERT INTO members(name, phone, balance) VALUES(?, ?, ?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, this.name); pstmt.setString(2, this.phone); pstmt.setDouble(3, ...
入门创建有权访问聊天API的服务帐户添加ChatService与库ID项目1XDYAGcUoblJ073Kjveni2WOZHpKLYE8qlYMkeHViavLXvsKnBIl1DR2A 将privateKey和issuerEmail发送到ChatService.init方法返回的对象具有Spaces , Members和...
The json module: JavaScript Object Notation The plistlib module: A Property-List Parser ctypes Enhancements Improved SSL Support Deprecations and Removals Build and C API Changes Port-Specific ...
- ASP(Active Server Pages)使用VBScript或JavaScript作为脚本语言,易于学习,但性能相对较低。 - PHP(Hypertext Preprocessor)跨平台,语法简洁,支持多种数据库,并且完全免费,适合快速开发。 - JSP...
私聊涉及两个用户之间的消息传递,可以通过创建`private_chats`表来存储每条聊天记录,记录`sender_id`、`receiver_id`和`message`等信息。群聊则需要`groups`表来存储群组信息,`group_members`表记录用户与群组的...
// public members } } 模块图案结构 var Calculator = function ( ) { // private member var elDom = document . getElementById ( 'el' ) ; return { // expose public member add : function ( x ,
例如,类`Foo`的`public_ex`会被编码,而`private_ex`、`protected_ex`以及常量`ERROR_CODE`和方法`getErrorCode()`则不会。 四、`json_decode` `json_decode`函数将JSON字符串转换为PHP的数据结构。默认情况下,它...
- 支持多种脚本语言如 VBScript 和 JavaScript; - 可以在 Windows 平台上无缝集成 IIS; - 提供了强大的 COM 组件支持,便于创建复杂的应用程序。 - **缺点:** - 依赖于 Windows 和 IIS,跨平台性差; - 性能...
而标签“TypeScript”表明这个项目使用了TypeScript语言,它是JavaScript的一个超集,提供了静态类型检查和现代语言特性,如类、接口和泛型,极大地增强了代码的可维护性和可靠性。 在TypeScript中,面向对象的核心...