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. GFS分布式文件系统环境部署与管理

    Gluster分布式文件系统 准备环境五台虚拟机 创建/gfs目录,把软件包全部拷贝目录 把yum仓库的源放进bak下才能执行以下脚本 并指定主机名这四台机器都要执行脚本 [root@localhos ...

  2. CF482D Random Function and Tree 树形DP + 思维 + 神题

    Code: #include<bits/stdc++.h> #define ull unsigned long long #define MOD 1000000007 #define ll ...

  3. BZOJ 1594: [Usaco2008 Jan]猜数游戏 线段树 + 思维 + 二分

    Code: #include<bits/stdc++.h> #define maxn 3000000 using namespace std; void setIO(string s) { ...

  4. eas之常用源码整理

    //查看是否有相关权限 boolean hasAllotPermission=         PermissionFactory.getRemoteInstance().hasFunctionPer ...

  5. pause、jobs、setitimer(2)、system v ipc(day12)

    一.pause()的使用 #include <unistd.h> int pause(void); 功能:等待信号的到来 返回值: - 错误 errno被设置 只有在信号处理函数执行完毕的 ...

  6. 【hihocoder 1499】A Box of Coins

    [题目链接]:http://hihocoder.com/problemset/problem/1499 [题意] [题解] 贪心,模拟; 从左往右对于每一列; 如果上下两个格子; ① 有一个格子超过了 ...

  7. mysql 安装完毕后登陆不了mysql的 shell 即mysql&gt;遇到:ERROR 1045 (28000): Access denied for user 'root'@'localhost‘

    [root@hzswtb2-mpc ~]# mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using pas ...

  8. bzoj3931【CQOI2015】网络吞吐量

    3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 853  Solved: 381 [Submit][id= ...

  9. [专辑] 也晒晒我的RBAC系统 ——行一山人的博客

    也晒晒我的RBAC系统(一):概述 也晒晒我的RBAC系统(二):系统实现原理简介 也晒晒我的RBAC系统(三):后台管理程序源码及使用演示 也晒晒我的RBAC系统(四):框架源代码(超值奉献,请勿拍 ...

  10. hihoCoder-1633 ACM-ICPC北京赛区2017 G.Liaoning Ship’s Voyage 线段与三角形规范相交

    题面 题意:给你一个20*20的地图,起点(0,0),终点(n-1,n-1),有障碍的点为‘#’,每次可以向8个方向走一步,还给了一个三角形,除了障碍以外,到这8个方向上的点的线段如果没有与三角形相交 ...