js私有特性,公有特性和特权特性

js中创建对象一般有两种常用方式。一,对象字面量。二,构造函数法 。

其中对象字面量方法很简单,在此不必赘述。

对于一个对象来说,有属性(attribution)和方法(method),把对象的属性和方法统称起来不妨称为对象的特性(property)。

对于对象字面量创建的对象,只有公有特性。对象的属性和方法只要通过点操作符就可以随意访问和修改,对象很容易被破坏,对象的封装性很差。

而构造函数法创建的对象就能提供一定的封装性。实现类似于C++,java的私有方法,常量,静态类等特性。

下面看一个典型的例子

//Person类

function Person(){

  //私有特性

  var age=‘23‘;

  //特权特性

  this.name=‘Bronvis‘
  
  this.sayAge=function(){

    alert(‘age: ‘+age);

  }

}

//公有特性    

Person.prototype={

  location:‘Hangzhou‘

  sayLocation:function(){

    alert(‘Location: ‘+this.location);

  }

}

//类的公有静态特性

Person.country=‘China‘;

var obj=new Person();

//对象的静态特性

obj.sex=‘male‘;

对于这种构造函数方式创建的对象。

可以发现对象的属性和方法有4种方式创建。其中可以分为两大类,一,对象自身特性。二,所有对象共享的原型特性。

一,对象自身特性

1,var关键字

  私有特性。通过函数的作用域限定变量的可访问性仅限于函数内部,从而实现这些特性只能在对象内部访问。

2,this关键字

  特权特性。通过this关键字实现创建的特性可以被外部任意对象通过点操作符访问,但相较于对象静态添加的特性,又能够访问对象的私有属性。所以,常被称为特权属性。

3,对象静态特性

  公有特性。(和特权属性相比,不能访问私有特性)

二,原型特性

  公有特性。和对象静态特性创建的属性的区别主要在于内存的占用。原型特性是多个对象共享同一片内存,而对对象静态特性则每个对象都占用内存。

上面的典型例子,只创建了类的静态公有特性,下面的例子将会创建类的私有静态特性

//通过闭包的方式实现类的静态私有属性

var Person=(function(){

  //类的静态私有特性

  var Time;

  //返回一个构造函数

  return function (){

    //私有特性

    var age=‘23‘;

    //特权特性

    this.name=‘Bronvis‘

    this.sayAge=function(){

      alert(‘age: ‘+age);

    }

 }

})();

//类的公有静态特性

Person.country=‘China‘;

其中类的静态私有属性常用来实现C++,java语言中的常量

时间: 2024-07-29 01:15:54

js私有特性,公有特性和特权特性的相关文章

js对象私有变量公有变量问题

0 js对象私有变量公有变量问题5 小弟初学JS面向对象编程 现有一问题 请教各位大虾: Person=function (){ //私有变量定义 var name; vae age; var Alert=function (){ alert(name+age);}; return { printName:function(){  alert(this.Alert());}, printAge:function(){alert(thia.age);} } } 外部调用 Person person

[Android 新特性] 安卓4.4新特性详解

在本月初,谷歌的5太子google  nexus5正式发布了,还给大家带来了全新的安卓android4.4的操作系统,并且官网给大家带来了新的说法,就是安卓4.4会比之前的系统更加省电,这个到底是为什么呢?网侠小编就来说说安卓4.4的为何省电的工作机制. 首先,我们要搞清楚一个问题,那就是什么是Dalvik? 在整个Android 4.4的更新特性中,最引人瞩目的应该就是虚拟机由Dalvik转成ART,也就是“中间件”的变更(Midware).先来看看什么是Dalvik. 如图,Dalvik虚拟

JavaScript面向对象-静态方法-私有方法-公有方法-特权方法,学习

var baseClass= function(){ function show(){//私有方法 alert("访问私有方法"); } function showName(){ alert(this.name); } this.showw = function (){//特权方法 showName(); } } //静态方法 baseClass.showStatic = function(){ alert("访问静态方法"); } //公有方法 baseClass

重新想象 Windows 8.1 Store Apps (84) - 图像处理的新特性, Share Contract 的新特性

原文:重新想象 Windows 8.1 Store Apps (84) - 图像处理的新特性, Share Contract 的新特性 [源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之图像处理的新特性, Share Contract 的新特性 图像处理的新特性 - 通过 RenderTargetBitmap 对 xaml 截图,以及保存图片 Share Contract 的新特性 - 增加 WebLink, ApplicationLink, 去掉

js私有作用域(function(){})(); 模仿块级作用域

摘自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.phpvar.com%2Farchives%2F3033.html js没有块级作用域,简单的例子: for(var i=0;i<10;i++){ alert(i); } alert(i); for循环后的i,在其它语言像c.Java中,会在for结束后被销毁,但js在后续的操作中仍然能访问到i值,即for循环后的alert(i);会弹出数值i=10; js模仿块级作用域: (function(){

类的私有属性 公有属性 继承 多态

私有属性 && 公有属性 1 #定义一个最简单的类 2 class person(object): 3 hometown = "china" #公有属性,所有类的对象共用的.使用对象.公有属性只会修改自己对象的公有属性,类名.公有属性会把所有对象的公有属性进行修改. 4 #原因是只要对象不调用公有属性是不会在自己本地创建其内存空间使用类共享的(类的实例化过程),只要本地修改就是在本地创建一个同名的变量而已,相当于局部变量,作用域屏蔽了类的公有属性 5 #构造函数,接收实

[js高手之路]构造函数的基本特性与优缺点

上文,通过基本的对象创建问题了解了构造函数,本文,我们接着上文继续了解构造函数的基本特性,以及优缺点. 每个对象上面都有一个constructor属性( 严格意义上来说,是原型上的,对象是通过查找到原型找到 constructor属性 ).后面讲到原型的时候,我会用示意图的方式说明 1 function CreateObj(uName) { 2 this.userName = uName; 3 this.showUserName = function () { 4 return this.use

js:语言精髓笔记12--动态语言特性(2)

对于括号内: 通过赋值时发生的重写: (Object1 = function() {}).prototype.value = 100; var obj1 = new Object1; console.log(obj1.value); // 100 语法声明阶段的重写: //会报错,一般引擎不承认在表达式中声明的标识符: (function Object2() {}).prototype.value = 100; 重写: 对内部对象系统的影响: 重写内置构造器:任意构造器的原型属性不受内置构造器重

jdk1.5新特性和jdk1.7新特性

jdk1.5新特性 1.自动装箱和自动拆箱 自动装箱,把基本类型的值变成对象类型 Integer a = 2; 自动拆箱,把对象类型变成基本类型 int b = new Integer(2); 而不需要调用intValue int b = new Integer(2).intValue(); 包装类有 Integer Boolean Float Double Short Byte 2.枚举 java枚举具有简单和安全性. 3.泛型 泛型在编译的时候可以控制类型,比如说List<String>