首页前端开发JavaScriptJavascript中什么是私有成员

Javascript中什么是私有成员

时间2024-01-30 01:05:02发布访客分类JavaScript浏览571
导读:收集整理的这篇文章主要介绍了Javascript中什么是私有成员,觉得挺不错的,现在分享给大家,也给大家做个参考。私有PRivate成员要由构造器生成。这个构造器有三个私有实例变量:param, secret, 和 self。它们被附加到了...
收集整理的这篇文章主要介绍了Javascript中什么是私有成员,觉得挺不错的,现在分享给大家,也给大家做个参考。

私有PRivate成员要由构造器生成。这个构造器有三个私有实例变量:param, secret, 和 self。它们被附加到了对象上,但它们无法从外部访问,同时它们也无法被这个对象的公共方法所访问。他们只对私有成员可见。

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

JavaScript 是世界上最被误解的语言。很多人认为它缺乏信息隐藏的特性所以对象不能有私有实例变量和方法。但这是一个误解。JavaScript对象同样可以拥有私有变量。下面就讲解一下:

对象

JavaScript根本上都是关于的对象(Object)的。数组(Array)是对象,函数(Function)是对象,Object就不说了。那什么是对象?对象是名称-值的配对的集合。名称是字符串,值可以是字符串、数字、布尔值和对象(包括数组和函数)。对象常常实现为哈希表以快速存取值。

如果一个值是函数,我们可以将它视为方法method。当调用一个对象的方法时,this 变量就会被设为该对象。这个方法就可以通过this变量访问实例变量。

对象是由构造器constructor产生的,它是初始化对象的函数。构造器提供了其它语言中类提供的特性,包括静态方法和变量。

公共成员

对象的成员都是 public 公共成员。任何函数都可以访问、修改或者删除这些成员。有两种主要的途径给新的对象加入成员:

构造器中

这个技术一般用来初始化公共实例变量。构造器的this变量是用来向对象添加成员的。

function Container(param) {
            this.member = param;
}
    

这样,如果我们构造一个新的对象

VAR myContainer = new Container('abc');
    

那么myContainer.member 就会包含'abc'。

原型中

这个技巧一般用来添加公共方法。当一个成员被检索且没有在对象中发现的时候,那么它就会从对象构造器的 prototyPE 成员中去获取它。这个原型机制可用来实现继承。它也保存内存。要为一个构造器生成的所有对象加入一个方法,将函数加入构造器的prototype 中:

Container.prototype.stamp = function (string) {
    	return this.member + string;
}
    

这样,我们可以调用这个方法

myContainer.stamp('def')

它会返回'abcdef'.

私有成员

私有Private成员要由构造器生成。构造器中的普通的var变量和参数都成为私有成员。

function Container(param) {
    	this.member = param;
        var secret = 3;
        var self = this;
    }
    

这个构造器有三个私有实例变量:param, secret, 和 self。它们被附加到了对象上,但它们无法从外部访问,同时它们也无法被这个对象的公共方法所访问。他们只对私有成员可见。私有方法则是构造器内部的函数。

function Container(param) {
	function dec() {
    		if (secret >
 0) {
    			secret -= 1;
    			return true;
		}
 else {
    			return false;
		}
	}
    	this.member = param;
    	var secret = 3;
    	var self = this;
}
    

私有方法 dec 检查 secret 实例变量。如果它大于0,就减少secret 的大小并返回 true 。否则它返回 false 。这个可以限制对象使用三次。

按照惯例,我们给出一个私有的 self 参数。这个可以令对象对私有方法可见。这种做法是因为ecmascript Language Specification中的一个错误,这个错误令 this 不能正确地对内部函数设置。

私有方法无法被公共方法调用。要令私有方法有用,我们需要引入一种特权方法。

特权成员

一个特权A privileged 方法可以访问私有的变量和方法,同时它对公共域可见。也可以删除或替换一个特权方法,但不能改变它。

特权方法是用 this 在构造器中分配的。

function Container(param) {
	function dec() {
    		if (secret >
 0) {
    			secret -= 1;
    			return true;
		}
 else {
    			return false;
		}
	}
    	this.member = param;
    	var secret = 3;
    	var self = this;
	this.service = function () {
		if (dec()) {
    			return self.member;
		}
 else {
    			return null;
		}
	}
    ;
}
    

service 就是一个特权方法。前三次调用会返回'abc'。之后 ,它会返回 null。service调用的私有的 dec 方法,而 dec又访问了私有的 secret变量。service对其它的对象和方法是可见的,但不能直接访问私有成员。

闭包

这种公共、私有和特权成员的模式是可行的原因是由于JavaScript有 closure闭包。这个意味着一个内部的函数总是可以访问这个函数外部的变量和参数,甚至在外部的函数返回之后。这是这个语言的一个极其强大的特性。目前没有哪本关于JavaScript编程的书展示了如何发掘这个特性。大多数都没有提到。

私有和特权成员只能在对象构造的时候生成。公共成员可以在任意时刻添加。

模式

公共(Public)

function Constructor(...) {
    	this.membername = value;
}
    Constructor.prototype.membername = value;
    

私有(Private)

function Constructor(...) {
      	var self =  this;
    	var membername =  value;
  	function  membername(...)  {
...}
}
    

注意,实际上函数语句

function  membername(...)  {
...}
    

是以下语句的缩写,两者相同:

var  membername = function  membername(...)  {
...}
    ;
    

特权(Privileged)

function Constructor(...) {
  	this.membername =  function (...)  {
...}
    ;
}
    

【推荐学习:javascript高级教程】

以上就是Javascript中什么是私有成员的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: javascript区分整数和浮点数吗下一篇:JavaScript怎么终止循环猜你在找的JavaScript相关文章 html font标签如何设置字体大小?html font标签属性用法介绍2022-05-16vue3+TypeScript+vue-router的使用方法2022-04-16vue3获取当前路由地址2022-04-16如何利用React实现图片识别App2022-04-16JavaScript展开运算符和剩余运算符的区别详解2022-04-16微信小程序中使用vant框架的具体步骤2022-04-16Vue elementUI表单嵌套表格并对每行进行校验详解2022-04-16如何利用Typescript封装本地存储2022-04-16微信小程序中wxs文件的一些妙用分享2022-04-16JavaScript的Set数据结构详解2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: Javascript中什么是私有成员
本文地址: https://pptw.com/jishu/591837.html
javascript区分整数和浮点数吗 javascript是什么格式的文件

游客 回复需填写必要信息