关闭

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

时间: 2018-03-20阅读: 2157标签: 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支持宏吗?

与其它类 Lisp 语言不同,不支持宏是 JavaScript 与生俱来的一个问题,这是因为宏会在编译时操作语法树,而这在像 JavaScript 这样的语言中几乎是不可能的。

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

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

js 实现栈和队列

js实现栈或者队列有两种方式: 1.数组:数组本身提供栈方法(push,pop),队列方法(push,shift)。 2.链表:构造链表结构,说白了就是链表的插入(尾插),移除(栈:末尾节点移除,队列:头结点移除)

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

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

window.location.href的用法(动态输出跳转)

javascript中的location.href有很多种用法,window.location.href 语句可以实现一个框架的页面在执行服务器端代码后刷新另一个框架的页面

1000多个项目中的十大JavaScript错误以及如何避免

通过统计数据库中的1000多个项目,我们发现在 JavaScript 中最常出现的错误有10个。下面会向大家介绍这些错误发生的原因以及如何防止。对于这些错误发生的次数,我们是通过收集的数据统计得出的。

js中bool值转换以及逻辑运算&&、||、 !!的使用

js作为一门弱类型语言,导致几乎所有数据都能转换为bool的类型,js转换 规则 。了解转换规则目的掌握逻辑运算符&&、||、 !!的使用

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

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

讲解JavaScript 之arguments的详解,arguments.callee,arguments.caller的使用方法和实例

arguments是什么?在javascript 中有什么样的作用?讲解JavaScript 之arguments的使用总结,包括arguments.callee和arguments.calle属性介绍。

js dom是什么?_JS中的DOM知识概览

JS中的DOM知识概览:文档对象模型,是针对 HTML 和 XML 文档的一个 API (应用程序编程接口), 描绘了一个层次化的节点树。 web 浏览器浏览一个页面的时候,DOM 就在幕后把你编辑的网页文档转换成一个文档对象。

点击更多...

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