JavaScript中公有、私有、静态、受保护的属性和方法

时间: 2018-03-20阅读: 1832标签: js知识

在开发中,我们需要限制某些属性和方法的暴露程度,使得它们不能通过对象实例本身被访问、修改或调用。要了解js面向对象,就必需先了解js中什么是公有、私有、静态、受保护。

私有:是指属性和方法不能再new对象中读写;
静态:无需实例化就可以调用的方法就叫静态方法;
受保护:不能直接读写,只能通过一个包装方法对其进行操作;


js的公有、私有属性和方法:

function Obj(){
    this.name='fly63';//公有属性
    var age=1;//私有属性
    this.fun=function(){//公有方法
        console.log(this.name+age);//age只能在构造函数内部访问
        test();
    }
    function test(){//私有方法,只能内部调用
        console.log(this.name+age);//这里的this.name获取不到的
    }
}
Obj.prototype.getName = function(){//公有方法
  return this.name;
}

var m=new Obj();
console.log(m.name);//fly63
console.log(m.getName());//fly63

console.log(m.age);//undefined
m.fun();//fly631 1
m.test();//报错:m.test is not a function

可以看出:

1、构造函数内部通过this声明的属性就是公有属性,通过var声明的就是私有属性。

2、所有定义在原型上方法都是“公有”的。


js的静态属性和方法:

js中,不需要实例化,即不用new操作符实化对象,就可调用对象的方法和属性。

function Obj(){} 
Obj.age = 1;//静态属性 
Obj.myname = 'fly63'; //这里不能用name作为属性明,否则会被默认返回对象名称Obj
Obj.getName =function(){//静态方法 
   return this.myname;//如果这里使用this.name,返回的将是User,所有改用了myname, 
} 

console.log(Obj.name);//输出Obj,这里就是为什么静态属性不能使用name作为属性名的原因
console.log(Obj.age);//输出1
console.log(Obj.getName());//输出fly63


js受保护的属性:

收保护的用于不能直接读写,只能通过一个包装方法对其进行操作,在js中把收保护的模拟成私有属性,通过公用方法进行读取操作,该公用方法我们可以把它称呼为特权方法。这样就实现了保护的目的,如下:

function Obj(name,age){
  var name = name,age = age;////私有属性
  this.getName = function(){ //特权方法
     return name;//私有属性和方法不能使用this调用
  }
  this.setName=function(newname){
        name=newname;
   }
}
var m = new Obj('fly63',26);
m.setName('fly63.com')
console.log(m.getName());//fly63.com


以上所述就是本文的全部内容了,希望大家能够喜欢。  


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/523

关闭

(...)这三个点在JavaScript中意味着什么?

解释JavaScript中三个点的作用:数组/对象扩展运算符、rest运算符(使用函数的参数时,无论是完全替换参数还是与函数的参数一起替换参数,这三个点也称为rest运算符)

为什么JavaScript开发如此疯狂

Web开发中其他一切对你而言都是小菜一碟,但当你深入探究JavaScript的时候,不免有一种“众人皆醒你独醉”的悲壮——好像其他人都知道你不知道的一些大的基础的知识内容,并且这些内容可以帮助你理解所有知识

js不同数据类型下的toString()与toLocaleString()的输出差异

toString()与toLocaleString()方法主要针对对象Object转换为字符串,如果是基本类型调用它们的时候,先会把基本类型实例化为对应的对象类型,然后在转换为字符串。这篇文章主要讲解不同数据类型下的toString()与toLocaleString()的输出差异。

如何掌握并用好defer(延迟执行)

defer:在函数A内用defer关键字调用的函数B会在在函数A return后执行。先看一个基础的例子,了解一下defer的效果,这段代码运行后会打印出:

Js常用基础算法

冒泡排序;插入排序 过程就像你拿到一副扑克牌然后对它排序一样;快速排序;回文字符串;翻转字符串;字符串中出现最多次数的字符;数组去重;二分查找

JS 中的垃圾回收

对于开发者来说,JavaScript 的内存管理是自动的、无形的。我们创建的原始值、对象、函数……这一切都会占用内存。当某个东西我们不再需要时会发生什么?JavaScript 引擎如何发现它、清理它?

javascript难点是什么?

javascript难点是什么?下面本篇文章就来给大家介绍一下10个JavaScript难点,感兴趣的小伙伴们可以参考一下,希望对大家有所帮助。立即执行函数,即Immediately Invoked Function Expression (IIFE),正如它的名字

WebSocket的原理及WebSocket API的使用,js中如何运用websocket

WebSocket是HTML5下一种新的协议,为解决客户端与服务端实时通信而产生的技术。其本质是先通过HTTP/HTTPS协议进行握手后创建一个用于交换数据的TCP连接

js秒数转换成时分秒_js如何将秒拼接为时分秒显示?

接口返回的是int类型的秒数,在前端显示要求拼接为时分秒显示,这篇文章主要讲解实现js秒数转换成时分秒的方法。

Performance_js中计算网站性能监控利器

Performance提供的方法可以灵活使用,获取到页面加载等标记的耗时情况。Performance.timing属性对象提供了浏览器从打开网页到加载完成之间各个节点的耗时数据,包括重定向开始、DNS查询、浏览器响应数据、DOM解析等相关节点

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全运营推广