JavaScript私有方法
some concepts: Java is from Sun Microsystem Inc., and JavaScript, called LiveScript before, is from Netscape; those two languages has little relationship with each other. Just their names confuse us.
个人一直以为javascript中没有私有成员(变量和方法)的说法,直到看完此文云雾骤散。
1.对象
Arrays, Functions, Objects都是对象。Objects是name-value pair的集合,name是string,value是strings、numbers、booleans、objects(arrays and functions etc.)。objects使用哈希表实现其告诉取值的特性。
1.对象可由.ctor来生成,跟其他语言中的构造函数差不多,也是做初始化工作。
2.javascript中没有class的概念,可以用定义function的方式来模拟一个类。如,function Person(){...}。
3.也可以使用JSON定义:
<script type="text/javascript">
var Employee ={
"empID":"",
"empFirstName":"",
"empLastName":"",
"setValues":function(id,fname,lname){
this.empID = id;
this.empFirstName = fname;
this.empLastName = lname;
},
"getValues":function(){
alert(this.empID + " " + this.empFirstName + " " +
this.empLastName);
}
} function main(){
Employee.setValues("1142″,"Yogesh","Jaiswal");
Employee.getValues();
}
</script> HTML Code : <div>
<asp:Button ID="btnCallmain" runat="server" Text="CallMain"
OnClientClick="javascript:main();"/>
</div>
4.继承机制是指,objects inherit from objects, not classes,因为没有类的概念。
2.Public
object的所有成员默认都是public的,任何function都可以访问、修改、删除已存在的成员,或增加新的成员。将成员加到Object中有两种主要的方法:
1) 使用构造函数.ctor,如:
function Person(name){this.Name=name;};
此方法通常初始化public instance variables;var paul=new Person("paul cheung");此时,paul.Name就是"paul cheung"。
2)使用原类型prototype(从原文得知,某object的prototype是此object的构造函数的一个成员),如:
Person.prototype.Greet = function(target){return "hi, " + target;}
此方法一般用于添加public methods,比如Shakehand方法没有在Person object中找到,此时就会去Person的prototype成员里找,这个很重要,直接上原文:When a member is sought and it isn't found in the object itself, then it is taken from the object's constructor's prototype member. The prototype mechanism is used for inheritance. It also conserves memory. To add a method to all objects made by a constructor, add a function to the constructor's prototype;
这就是prototype继承机制;paul.Great("chris paul")会返回"hi, chris paul".
3.Private
构造函数里的成员(变量、参数)都是私有的(这个比较费解,刚demo出来的貌似有出入,理解错了难道?我用IE10);构造器里的函数都是private的:
>> function Container(param) {
this.member = param;
var secret = 3;
var that = this; #构造函数创建三个私有变量,添加到object上,不能被外部和public方法访问;只有私有方法可以访问(为啥Greet方法可以访问member?)
} Container.prototype.Greet = function(){console.log(this.member);} #Greet() is public? if so why c.Greet() can get this.member?f**k c = new Container("paul's container") c.member #can not get this member;
c.Greet();
paul's container #c.Greet();
PS:可以对变量进行数值检测,进而赋值或做其他操作;
4.Privileged
此种方法可以访问private变量或private方法,外部或public方法可以访问privileged方法,可以删除或替换privileged方法,但不能更改。
5.Closures(闭包?)
理解起来还是迷迷糊糊,两个链接以备后用: Private Members in JavaScript,by Douglas Crockford; and Natural JavaScript private methods, by Andrea Giammarchi.
JavaScript私有方法的更多相关文章
- javascript私有方法揭示为公有方法
揭示模式可用于将私有方法暴露为公共方法.当为了对象的运转而将所有功能放置在一个对象中以及想尽可能地保护该对象,这种揭示模式就非常有用. 板栗: var myarray; (function(){ va ...
- js基础知识温习:Javascript中如何模拟私有方法
本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...
- JavaScript【面向对象】-静态方法-私有方法-公有方法-特权方法
JavaScript面向对象是近年来比较火的一个概念了,由于小弟才疏学浅,虽然做过不少的web项目,看了网上很多深奥的资料和教程,还是对他们深奥 的理论一知半解,前段时间看了点书,总算有了自己的理解, ...
- JavaScript 新语法详解:Class 的私有属性与私有方法
译者按: 为什么偏要用 # 符号? 原文:JavaScript's new #private class fields 译者:Fundebug 本文采用意译,版权归原作者所有 proposal-cla ...
- Javascript 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解
一,私有属性和方法 私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用. <script> /* * 私有方法:私有方法本身是可 ...
- .net 反射访问私有变量和私有方法 如何创建C# Closure ? C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密 C#中的foreach和yield 数组为什么可以使用linq查询 C#中的 具名参数 和 可选参数 显示实现接口 异步CTP(Async CTP)为什么那样工作? C#多线程基础,适合新手了解 C#加快Bitmap的访问速度 C#实现对图片文件的压
以下为本次实践代码: using System; using System.Collections.Generic; using System.ComponentModel; using System ...
- JavaScript - reduce方法,reduceRight方法 (Array)
JavaScript - reduce方法 (Array) 解释:reduce() 方法接收一个函数作为累加器(accumulator),数组 中的每个值(从左到右)开始合并,最终为一个值. 语法:a ...
- iOS 私有变量 私有方法
实例变量既可以在@interface中定义 也可以在@implementation中定义 在@implementation中的成员变量默认是私有的成员变量 并且和利用@private修饰的不太一样 在 ...
- JavaScript slice() 方法
JavaScript slice() 方法 JavaScript Array 对象 实例 在数组中读取元素: var fruits = ["Banana", "Oran ...
随机推荐
- 【转载】解决方案:git@github.com出现Permission denied (publickey)
遇到的问题 今天心血来潮,想将intellij上的项目代码放到GitHub上管理. 在进行添加远程库的时候,出现了:git@github.com出现Permission denied (publick ...
- BZOJ2212——线段树合并
学习线段树合并,以这道题为契机 多谢这篇博客 这里是通过对线段树合并时,顺手统计了对于一颗子树内,是否反转两种情况的逆序对数 这里只对代码进行详细分析,见注解好了 #include<cstdio ...
- html第七节课
document 1.Window.document对象 一.找到元素: docunment.getElementById("id"):根据id找,最多找一个: var a ...
- 26.mget批量查询
主要知识点 一.mget批量查询的好处 get查询就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的.如果使用mget进行批量查询的话,查询 ...
- 在vue项目中引用element-ui时 让el-input 获取焦点的方法
在制作项目的时候遇到一个需求,点击一个按钮弹出一个input输入框,并让输入框获得焦点,项目中引用了ElementUI 在网上查找了很多方法,但是在实际使用中发现了一个问题无论是使用$ref获取inp ...
- CodeForces 396C On Changing Tree
On Changing Tree Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces ...
- 【ACM】poj_2092_Grandpa is Famous_201308021920
Grandpa is FamousTime Limit: 2000MS Memory Limit: 30000K Total Submissions: 7256 Accepted: 3670 De ...
- 打造终端下mutt收发邮件环境(fbterm,fetchmail,msmtp,procmail,mutt)
实现mutt下收发邮件须要安装,mutt,fbterm,fetchmail,msmtp,procmail 下面是各配置文件.在home文件夹下,隐私信息有马赛克... .muttrc : 当中Mail ...
- 【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(三)
关于windows平台搭建Mongo数据库复制集这个话题,我已经在前面写了两篇博客 第一篇: 怎样在windows平台搭建Mongo数据库复制集 第二篇: 数据同步和故障自适应測试 在本篇里面,咱们重 ...
- Java设计模式之从[星际争霸的兵种升级]分析观察者(Observer)模式
观察者模式定义对象的一种一对多的依赖关系.当一个对象的状态发生改变时.全部依赖于它的对象都会得到通知并被自己主动更新. 一个简单的样例是.在星际争霸的虫族中有一个0基础单位叫做跳狗(Zergling) ...