`
xitong
  • 浏览: 6194221 次
文章分类
社区版块
存档分类
最新评论

javascript中的私有,公有,特权和静态方法

 
阅读更多

javascript的函数既可以作为普通的函数进行调用,也可以作为构造函数进行创建对象。在作为普通函数进行调用的情况,由于大家比较熟悉,并且平时使用也比较多,所以这里就不做进一步的阐述了,本文重点是分析javascript函数作为一个构造函数进行创建对象的过程和在构建高可复用的框架的一些技巧tips。

我们知道,调用构造函数创建一个javascript的对象过程是很容易的,实例代码如下:

var myObj = new myConstructor(); //这里当然可以传递一些参数;

但如果拆分new 操作符对应的函数调用系列,可以拆分理解成下列的执行步骤:

var myObj = new Object(); //创建一个本地的javascript native object

myConstructor.call(myObj); //把当前创建的对象作为myConstructor的this参数并且调用构造函数进行初始化;

myObj[[prototype]] = myConstructor.prototype; //把myConstructor的prototype的引用赋给对象myObj的内部原型属性

通过第三步骤的赋值,使得通过prototype增加的函数均在构造的各个实例中都是可访问的,并且只保留一份拷贝。

有了上面的预备知识,下面理解私有,公有,静态和特权成员就比较容易了。还是以例子代码为例。

//构造函数如下

function myContructor(info) {

this.info = info; //这是实例的属性,并且是公有的,每new 一个实例都生成一个新的属性

//这个是私有的属性,对每new一个的实例来说,是不可见的,但构造函数执行完毕就消失了,

//注意这里的var 关键字

var _innerVar = 'this is private var';

//这个是私有方法,同样对每new一个实例来说,也是不可见的,只在构造函数的执行过程中可见

//私有方法可以使用私有属性和实例的各个属性

function _innerFn(){

//TODO HERE

};

_innerFn();

//特权方法,本身也是公有的方法,任何生成的实例都可以调用,但这里之所以称为“特权”方法,是因为该方法

//由于放到了构造函数的内部,使得具有权限访问构造函数执行过程的作用域链的各个属性和函数,包括私有属性

//和私有方法,但同时由于作为实例的一个成员方法,每new一个对象,都会创建一个单独的特权方法的拷贝,

//从根本目的上看,特权方法的存在是为了访问私有方法和私有属性并且发布为实例的公共成员方法。这里其实

//已经形成了一个闭包

this.specialFn = function(){

_innerFn();

this.message = this.info + _innerVar;

};

};

//通过prototype实现的方法均是公有方法,并且每个实例都共享一份拷贝,通过上面的new的拆分过程可以理解到这点。

myConstructor.prototype.publicFn = function(){};

//静态方法

myConstructor.staticFn = function(){};

//静态成员

myConstructor.staticVar = 'abc';

其实静态方法只是作为function对象实例自身的一个成员方法和成员函数而言,跟构造函数本身没太大的关系,常用于定义常量和保持唯一值的存储,比如Math.PI等。

分享到:
评论

相关推荐

    JavaScript中的公有、私有、特权和静态成员用法分析

    本文实例讲述了JavaScript中的公有、私有、特权和静态成员用法。分享给大家供大家参考。具体分析如下: 下面的内容是在《JavaScript.DOM高级程序设计》里面摘抄出来的,比较容易理解,特在此记录一下,便于入门...

    Javascript 构造函数,公有,私有特权和静态成员定义方法

    其中公有方法声明的部分采用的两种方式,在实际应用中一般采取一种方式就可以了,如果两种方式都要采用的话,应注意顺序,防止前面写的方法被清空或覆盖。

    js面向对象之公有、私有、静态属性和方法详解

    主要详细介绍了js面向对象之公有、私有、静态属性和方法,并附上详细的示例,非常的细致全面,这里推荐给大家,有需要的小伙伴可以参考下

    浅谈Javascript的静态属性和原型属性

    文章给各位介绍Javascript的静态方法和原型方法一个例子,如果大家对于Javascript的静态方法和原型方法不了解可以和小编一起来看看。 一段代码,了解静态方法和实例方法: [removed] //对象构造函数 function ...

    JavaScript中的面向对象介绍

    对象 创建 对象 构造函数 公有、私有、特权、静态成员 this、call和apply 异常处理 继承 原型 对象 在JavaScript,可以说everything is object,那么什么是对象?对象就是包含一组变量和函数的集合。在其它面向对象...

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part1.rar

     2.2.4 公有、私有、特权和静态成员真那么重要吗   2.2.5 对象字面量   2.3 this是什么   2.4 try{}、catch{}和异常处理   2.5 实例:你自己的调试日志   2.5.1 为什么需要JavaScript日志对象   ...

    Javascript 类与静态类的实现

    今天所要说的就是,如何在Javascript里写类与静态类,这是本人一惯用的方法,你也可以有更为方便的,也可以发发评论跟大家交流交流。 首先说说类,在一个类里我们会有以下的几个特征: 1. 公有方法 2. 私有方法 3. ...

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part3.rar

     2.2.4 公有、私有、特权和静态成员真那么重要吗   2.2.5 对象字面量   2.3 this是什么   2.4 try{}、catch{}和异常处理   2.5 实例:你自己的调试日志   2.5.1 为什么需要JavaScript日志对象   ...

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part2.rar

     2.2.4 公有、私有、特权和静态成员真那么重要吗   2.2.5 对象字面量   2.3 this是什么   2.4 try{}、catch{}和异常处理   2.5 实例:你自己的调试日志   2.5.1 为什么需要JavaScript日志对象   ...

    javascript面象对象编程

    一、支持基础 面向对象思想中,最核心的概念之一是类。 类:对一组属性及方法的集合。 二、函数 函数定义方法 函数声明后加括号 – 创建完成后立即调用执行 ...2. 公有成员,私有成员,静态成员 3. 类的继承

    Javascript之面向对象--方法

    本篇文章主要介绍了Javascript的面向对象,对对象方法的调用、私有方法、静态方法、公有方法、特权方法进行了一一介绍,需要的朋友可以看下

    javascript 面向对象全新理练之继承与多态

    前面我们讨论了如何在 JavaScript 语言中实现对私有实例成员、公有实例成员、私有静态成员、公有静态成员和静态类的封装。这次我们来讨论一下面向对象程序设计中的另外两个要素:继承与多态。

    Javascript 类与静态类的实现(续)

    这次我们直接看例子: 代码如下: /***定义静态类***/ var StaticClass = (function(){ var Return = { Property: “Test Static Property”, //公有属性 Method: function(){ //公有方法 alert(_Field); //...

    JavaScript 对象的属性和方法4种不同的类型

    第一种类型就是前面所说的私有类型,它的特点是对外界完全不具备访问性,要访问它们,只有通过特定的getter和setter。 第二种类型是动态的公有类型,它的特点是外界可以访问,而且每个对象实例持有一个副本,它们...

    PHP和MySQL Web开发第4版pdf以及源码

    6.10.2 实现静态方法 6.10.3 检查类的类型和类型提示 6.10.4 克隆对象 6.10.5 使用抽象类 6.10.6 使用__call()重载方法 6.10.7 使用__autoload()方法 6.10.8 实现迭代器和迭代 6.10.9 将类转换成字符串 6.10...

    PHP和MySQL WEB开发(第4版)

    6.10.2 实现静态方法 6.10.3 检查类的类型和类型提示 6.10.4 克隆对象 6.10.5 使用抽象类 6.10.6 使用__call()重载方法 6.10.7 使用__autoload()方法 6.10.8 实现迭代器和迭代 6.10.9 将类转换成字符串 6.10.10 使用...

Global site tag (gtag.js) - Google Analytics