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私有方法的更多相关文章

  1. javascript私有方法揭示为公有方法

    揭示模式可用于将私有方法暴露为公共方法.当为了对象的运转而将所有功能放置在一个对象中以及想尽可能地保护该对象,这种揭示模式就非常有用. 板栗: var myarray; (function(){ va ...

  2. js基础知识温习:Javascript中如何模拟私有方法

    本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...

  3. JavaScript【面向对象】-静态方法-私有方法-公有方法-特权方法

    JavaScript面向对象是近年来比较火的一个概念了,由于小弟才疏学浅,虽然做过不少的web项目,看了网上很多深奥的资料和教程,还是对他们深奥 的理论一知半解,前段时间看了点书,总算有了自己的理解, ...

  4. JavaScript 新语法详解:Class 的私有属性与私有方法

    译者按: 为什么偏要用 # 符号? 原文:JavaScript's new #private class fields 译者:Fundebug 本文采用意译,版权归原作者所有 proposal-cla ...

  5. Javascript 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解

    一,私有属性和方法 私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用. <script> /* * 私有方法:私有方法本身是可 ...

  6. .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 ...

  7. JavaScript - reduce方法,reduceRight方法 (Array)

    JavaScript - reduce方法 (Array) 解释:reduce() 方法接收一个函数作为累加器(accumulator),数组 中的每个值(从左到右)开始合并,最终为一个值. 语法:a ...

  8. iOS 私有变量 私有方法

    实例变量既可以在@interface中定义 也可以在@implementation中定义 在@implementation中的成员变量默认是私有的成员变量 并且和利用@private修饰的不太一样 在 ...

  9. JavaScript slice() 方法

    JavaScript slice() 方法  JavaScript Array 对象 实例 在数组中读取元素: var fruits = ["Banana", "Oran ...

随机推荐

  1. snv报错

    ERROR svn: E160028: Commit failed svn出现上面错误,先更新再提交即可解决.

  2. Java8新特性 Stream流式思想(二)

    如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...

  3. [Kernel参数]----/etc/sysctl.conf

    修改sysctl方法 方法一:修改/proc下内核参数文件内容 直接修改内核参数ip_forward对应在/proc下的文件/proc/sys/net/ipv4/ip_forward.用下面命令查看i ...

  4. 【ABCD组】Scrum meeting 2

    前言 第2次会议在6月14日由组长在教9 405召开. 主要对下一步的工作进行说明安排,时长90min. 主要内容 经会议讨论,由于一些对知识掌握的原因,决定放弃java语言实现系统,改用c#完成此系 ...

  5. QT中tableview不能更新数据,why?

    model->select(); //model->removeColumn(0);++++++++++++++++++++ //model->setHeaderData(model ...

  6. 【[Offer收割]编程练习赛10 C】区间价值

    [题目链接]:http://hihocoder.com/problemset/problem/1483 [题意] 中文题 [题解] 二分最后的答案; 二分的时候; 对于每一个枚举的值x; 计算小于等于 ...

  7. 获取Class对象方式

    在java中,每个class都有一个相应的Class对象,当编写好一个类,编译完成后,在生成的.class文件中,就产生一个Class对象,用来表示这个类的类型信息.获得Class实例的三种方式: 1 ...

  8. 使用大白菜U盘进入PE后再次重启电脑会留后门的清理方法

    使用大白菜U盘进入PE后再次重启电脑会留后门,这个后门主要是自动下载安装一些软件,比如金山毒霸等. 清除方法: 1.每次用完PE重启前,清理以下地方: ①c:\Windows\xxxxx.exe(查看 ...

  9. Python学习-修饰器 - itemgetter的妙用

    下面这篇对装饰器讲的很好,懂了. http://python.jobbole.com/85056/ <简单 12 步理解 Python 装饰器> 使用装饰器非常简单(见步骤10),但是写装 ...

  10. POJ 1987

    T_T为毛会这样子,我的写就是过不了,....... 其实这题不难,很容易想到吧,我一开始也想着用枚举这类方法,但复杂度实在不敢想,没想到,真的是用这种方法.. 今天学了一个叫树的重心,可以使分治的子 ...