书读百遍其义自见

学习《JavaScript设计模式》一书时,前两个章节中的讲解的JavaScript基础知识,让我对属性和方法有了清晰的认识。如下是我的心得体会以及部分摘录的代码。

不同于大多数面向对象语言一样,JavaScript作为一种解释性的弱类型语言,通过自身的一些特性实现类的封装,从而实现面向对象的。面向对象编程的思想就是一些属性方法的隐藏和暴露,比如私有属性、私有方法、共有属性、共有方法等。既然JavaScript实现了面向对象,同样具有这些属性和方法。

JavaScript中包含:

  • 私有属性(私有方法)
  • 特权方法
  • 公有属性(公有方法)
  • 类静态共有公有属性(类静态公有方法)   注:对象不能访问
  • 共有属性(共有方法)
  • 静态私有属性(静态私有方法) 注:通过闭包可以实现

如下是代码实例:

 <!DOCTYPE html>
<html>
<head>
<title>属性与方法</title>
<meta charset="utf-8">
<script type="text/javascript">
var Book=function(id,name,price){
// 私有属性
var num=1;
var name,price;
// 私有方法
function checkId(){ }; // 特权方法
this.getName=function(){};
this.setName=function(){};
this.getPrice=function(){};
this.setPrice=function(){};
// 对象公有属性
this.id=id;
this.chapters=["章节1","章节2"];
// 对象公有方法
this.copy=function(){
console.log('公有方法,对象实例可访问');
};
//构造器
this.setName(name);
this.setPrice(price);
}
// 类静态公有属性(对象不能访问)
Book.isChinese=true;
// 类静态公有方法(对象不能访问)
Book.resetTime=function(){
console.log('new time');
} Book.prototype={
// 共有属性
isJSBook:false,
// 共有方法
display:function(){}
} var b1=new Book(1,'爱的教育',20);
console.log(b1.num); //undefined 对象实例无法访问私有属性
console.log(b1.id); //1 对象实例可访问公有属性
console.log(b1.isJSBook); //false 对象实例可访问共有属性
console.log(b1.isChinese); //undefined 对象实例无法访问类静态公有属性
console.log(Book.isChinese); //true 类直接访问类静态公有属性
console.log(b1.chapters); //["章节1","章节2"] 对象实例可访问公有属性 //以下验证公有属性各个对象实例之间互不影响
var b2=new Book(2,'茶花女',30);
console.log(b2.id); //
console.log(b2.chapters); //["章节1","章节2"]
b2.chapters.push("章节3");
console.log(b2.chapters); //["章节1","章节2","章节3"]
console.log(b1.chapters); //["章节1","章节2"]
</script>
</head>
<body>
</body>
</html>

通过闭包实现类的静态私有变量和静态私有方法:

 <!DOCTYPE html>
<html>
<head>
<title>属性与方法</title>
<meta charset="utf-8">
<script type="text/javascript">
var Book=(function(){
// 静态私有属性
var isChinese=true;
// 静态私有方法
var resetTime=function(){
console.log('new time');
} function _book(id,name,price){
// 私有属性
var num=1;
var name,price;
// 私有方法
function checkId(){
}; // 特权方法
this.getName=function(){};
this.setName=function(){};
this.getPrice=function(){};
this.setPrice=function(){};
// 对象公有属性
this.id=id;
this.chapters=["章节1","章节2"];
// 对象公有方法
this.copy=function(){
console.log('公有方法,对象实例可访问');
};
//构造器
this.setName(name);
this.setPrice(price);
} //构建原型
_book.prototype={
isJSBook:false,
// 共有方法
display:function(){}
} //返回类
return _book;
})(); var b1=new Book(1,'爱的教育',20);
console.log(b1.num); //undefined 对象实例无法访问私有属性
console.log(b1.id); //1 对象实例可访问公有属性
console.log(b1.isJSBook); //false 对象实例可访问共有属性
console.log(b1.isChinese); //undefined 对象实例无法访问类静态私有属性
console.log(b1.chapters); //["章节1","章节2"] 对象实例可访问公有属性 //以下验证公有属性各个对象实例之间互不影响
var b2=new Book(2,'茶花女',30);
console.log(b2.id); //
console.log(b2.chapters); //["章节1","章节2"]
b2.chapters.push("章节3");
console.log(b2.chapters); //["章节1","章节2","章节3"]
console.log(b1.chapters); //["章节1","章节2"]
</script>
</head>
<body>
</body>
</html>

JavaScript中的方法和属性的更多相关文章

  1. 全面理解Javascript中Function对象的属性和方法

    http://www.cnblogs.com/liontone/p/3970420.html 函数是 JavaScript 中的基本数据类型,在函数这个对象上定义了一些属性和方法,下面我们逐一来介绍这 ...

  2. JavaScript中的可枚举属性与不可枚举属性

    在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包 ...

  3. JavaScript中reduce()方法

    原文  http://aotu.io/notes/2016/04/15/2016-04-14-js-reduce/   JavaScript中reduce()方法不完全指南 reduce() 方法接收 ...

  4. JavaScript中的方法、方法引用和参数

    首先,我们来看一段代码,如果觉得不甚明白的,则本文会对你有益: var player = function (e) {             return (function f(m) {      ...

  5. 详解 JavaScript 中 splice() 方法

    splice() 方法是一个比较少用的方法,但是功能确实很好,并且在我们 coding 的时候,经常有需要 splice() 方法,先介绍一下该方法. 在 JavaScript 中 splice() ...

  6. JavaScript中的方法

    JavaScript中的方法 在JavaScript中,可以通过对象来调用对应的方法.在JavaScript中,有三个重要的window对象方法:用于显示警告信息的alert.用于显示确认信息的con ...

  7. JavaScript中Array方法总览

    title: JavaScript中Array方法总览 toc: true date: 2018-10-13 12:48:14 push(x) 将x添加到数组最后,可添加多个值,返回数组长度.改变原数 ...

  8. javascript中对象访问自身属性的方式

    在javascript中,通过对象的方法访问对象自身属性时,必须采用this.fieldName的方式. 原因是javascript中Function是无状态的,访问对象的属性时,必须指定当前的上下文 ...

  9. JavaScript中trim 方法实现

    Java中的 String 类有个trim() 能够删除字符串前后的空格字符.jQuery中也有trim()方法能够删除字符变量前后的字符串. 可是JavaScript中却没有对应的trim() 方法 ...

随机推荐

  1. rabbit localhost不能登录

    解决方案 将C:\Users\{用户名}\.erlang.cookie 复制到 C:\Windows\System32\config\systemprofile 目录. 重启rabbitMQ服务 [转 ...

  2. (转)nginx+redis实现接入层高性能缓存技术

    转自:https://blog.csdn.net/phil_code/article/details/79154271 1. OpenRestyOpenResty是一个基于 Nginx与 Lua的高性 ...

  3. 什么是Js原型?(1)(包括作用:继承)

    学习目标:    认识什么js是原型,原型.构成函数.实例对象关系:原型应用范围. 什么是原型    函数有原型,函数有一个属性叫prototype,函数的这个原型指向一个对象,这个对象叫原型对象.这 ...

  4. JS中的Date对象

    1.构造函数 Date 对象可以通过构造函数来生成,Date 的构造函数可以放入四种不同的参数 1.1.new Date() ,返回此时的本地日期时间的date对象 let d = new Date( ...

  5. web大文件断点续传

    1,项目调研 因为需要研究下断点上传的问题.找了很久终于找到一个比较好的项目. 在GoogleCode上面,代码弄下来超级不方便,还是配置hosts才好,把代码重新上传到了github上面. http ...

  6. [CSP-S模拟测试]:走格子(模拟+BFS+Dijkstra)

    题目描述 $CYJ$想找到他的小伙伴$FPJ$,$CYJ$和$FPJ$现在位于一个房间里,这个房间的布置可以看成一个$N$行$M$列的矩阵,矩阵内的每一个元素会是下列情况中的一种:$1.$障碍区域—这 ...

  7. jsplumb+dragable+vue(一)

    基于vue的jsplumb,支持拖拽生成节点,节点双击展示更多信息,节点连线,删除节点,删除连线,重绘连接图,当前页面刷新连接图,根据json画连接图等功能 本章主要讲 拖拽生成节点 获取链接图的信息 ...

  8. 组件Component详解

    [转]https://www.cnblogs.com/moqiutao/p/8328931.html

  9. JSP表单提交 与 接受显示

    Demo01.jsp 提交表单输入的信息至 Demo02.jsp方法一 1 <%@ page language="java" contentType="text/h ...

  10. [LeetCode] 461. Hamming Distance(位操作)

    传送门 Description The Hamming distance between two integers is the number of positions at which the co ...