书读百遍其义自见

学习《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. glDrawArrays 和 glDrawElements

     在openGL中,所有图形都是通过分解成三角形的方式进行绘制.(一个矩形分解成两个三角形进行绘制) glDrawArrays 和 glDrawElements 的作用都是从一个数据数组中提取数据渲染 ...

  2. xml与json互转

    依赖包: <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib< ...

  3. 自动化测试平台环境docker部署

    参考资料:testin云测 https://www.testin.cn接口自动化测试平台:http://120.79.232.23星云测试 http://www.threadingtest.com腾讯 ...

  4. bzoj4128 Matrix 矩阵 BSGS

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4128 题解 想了十分钟没有任何思路. 然后一眼瞥见一句话"数据保证在 \(p\) 内 ...

  5. [BZOJ] 书堆

    问题描述 蚂蚁是勤劳的动物,他们喜欢挑战极限?现在他们迎来了一个难题!蚂蚁居住在图书馆里,图书馆里有大量的书籍.书是形状大小质量都一样的矩形.蚂蚁要把这些书摆在水平桌子的边緣.蚂蚁喜欢整洁的布置,所以 ...

  6. Codeforces 892E Envy

    问题描述 小Q正在玩一个叠塔的游戏,游戏的目标是叠出尽可能高的塔.在游戏中,一共有n张矩形卡片,其中第i张卡片的 长度为a_i,宽度为b_i.小Q需要把所有卡片按一定顺序叠成一座塔,要求对于任意一个矩 ...

  7. 对async 函数的研究

    async 函数 1.ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖. 前文有一个 Generator ...

  8. ht-6 hashSet特性

    Set接口: Set接口是Collection接口的另外一个常用子接口,Set接口描述的是一种比较简单的集合,集合中的对象并不按特定的方式排序,并且不能保存重复的对象,即set接口可以存储一组唯一的无 ...

  9. C#第一个程序Helloworld

  10. swan.after

    解释: swan.after可以拦截所有当前运行小程序对于API的调用,默认传入function时,只在API函数调用的返回阶段拦截.如果传入Object,则可以选择拦截的阶段(例如: 返回阶段.回调 ...