面向对象
面向对象的三大特点:封装、继承、多态
javascript语言本身拥有对象,实现了对属性,方法的封装(也只是封装了一半,并没有实现对属性和方法的访问控制),却并没有实现继承和多态,但却利用语言的其他特性实现(具体哪些特性,有待研究)了(曲线救国)了继承和多态。所以个人认为javascript”算是“面向象对象语言(重点于写代码的人有没有面向对象的思想)。
- 利用javascript函数的”闭包“特征,可以实现”封装“特点——对属性的公有和私有控制
function List(){
//利用闭包实现私有属性
var m_elements = [];
m_elements = Array.apply(m_elements, arguments);
//公有属性
this.length = {
valueOf:function(){
return m_elements.length;
},
toString:function(){
return m_elements.length;
}
}
//公有方法
this.toString = function(){
return m_elements.toString();
}
this.add = function(){
m_elements.push.apply(m_elements,arguments);
}
}
var alist = new List(1,2,3);
alert(alist); //相当于 alist.toString();
alert(alist.length)//相当于 alist.length.toString();
在javascript里,对象的属性和方法支持4种不同的的类型:
- 私有属性
- 动态公有属性
- 静态公有属性(原型属性)
- 类属性
function myClass(){
//私有变量
var p = 100;
//动态公有变量
this.x = 10;
}
//静态公有变量(原型属性),一旦改动,将影响所有对象,所有对象都可以访问
myClass.prototype.y = 20;
//类变量
myClass.z = 30;
var a = new myClass();
a.p // undefined 因为是私有变量所以该问不到
a.x = 20; // 改变动态公有变量
a.y = 40; // 给单个实例a添加动态公有变量,与原型属性重复时,将覆盖原型属性
delete(a.x); //删除动态公有变量x
delete(a.y); //删除动态公有变量y
a.x // undefined a没了,自然没法访问
a.y // 20 原型属性又还原了,哈哈
myClass.z //30,没啥好说的
匿名函数最有趣的用途是用来创建闭包。闭包(closure)是一个受到保护的变量空间,由内嵌函数生成。Javascript具有函数级的作用域。这意味着定义在函数内部的变量在函数外部不能被访问。Javascript的作用域又是词法性质(lexicallly scoped)。这意味着函数运行在定义它的作用域中,而不是在调用它的作用域中。把两个因素结合起来,就能通过把变量包裹在匿名函数中而对其加以保护。
---《javascript设计模式》
对象的易变性:可以动态的修改类或对象。
对象的内省性:即反射机制(reflection)。
JS在模仿传统的面向对象特性的技术都依赖于对象的易变性和反射机制。
对象易变性的缺点:随时都可以修改一个类或对象,这使得一个对象/类的特征不稳定,进行类型检查很困难,所以这是JS缺少类型检查的原因之一。
继承:JS的继承是基于对象的(原型式)继承,它可以用来模仿基于类(类式)继承。这两种继承方式的性能也会不同,根据手头任务的实际情况,有时其中的某种会更适合一些。
分享到:
相关推荐
Spring Boot与Vue.js学生...本资源提供了一个完整的读书笔记共享平台系统设计和开发的解决方案,涵盖了软件开发流程、B/S架构、面向对象编程思想、Spring Boot框架、Java语言、系统功能模块和系统测试等方面的知识点。
《面向对象的Javascript》(Object-Oriented JavaScript) 《Javascript高级程序设计(第二版)》(Professional JavaScript for Web Developers, 2nd Edition) 它们都是非常优秀的Javascript读物,推荐阅读。 笔记...
Java是由SUN公司开发的一种面向对象的编程语言,主要用于服务器端编程和数据库操作,是一种强类型的、编译型的语言。而JavaScript则是一种轻量级的、解释型的脚本语言,主要运行在浏览器上,用于处理前端逻辑,实现...
在JavaScript中,创建对象是进行面向对象编程的基础之一。不同于C#等其他语言,JavaScript提供了多种方式来创建对象。最常见的方式是使用`new Object()`或直接通过对象字面量的方式创建。 1. **使用`new`关键字:**...
JavaScript是基于原型的面向对象语言,你需要了解构造函数、原型链、对象属性与方法、继承机制(原型链继承、借用构造函数、组合继承、寄生组合继承、原型式继承、ES6的类)。此外,还要掌握闭包和作用域,这是...
原型继承是JavaScript实现面向对象编程的方式,通过原型链,对象能够共享属性和方法,实现代码复用。 数组和集合也是笔记的重点。JavaScript的数组支持多种操作,如push、pop、slice等,而Set和Map等ES6新增的集合...
原型继承是JavaScript的另一个重要特性,它允许对象直接从其他对象继承属性和方法,这种继承方式不依赖于类的概念,因此与传统的面向对象编程有所不同。这虽然提供了一种不同于类继承的灵活性,但也可能会让习惯了类...
由于 Javascript 面向对象机制及其的重要,而且内容非常的繁多,在这里就分篇章逐个介绍。 使用对象首先就是声明它(内置的对象当然就不需要了)。该死的 Javascript 总是会让我们死去很多的脑细胞,这篇文章主要...
3. **基于原型的面向对象**:JavaScript采用原型继承实现面向对象编程,对象可以通过原型链共享属性和方法。 4. **生成器(Generators)**:生成器函数可以暂停执行并在后续调用中恢复,这使得异步编程更为灵活。 ...
Java是一种广泛使用的面向对象的编程语言,以其“一次编写,到处运行”的特性闻名。笔记中的Java内容可能包括基础语法、类与对象、接口、多线程、集合框架、异常处理、IO流以及网络编程等。对于初学者,理解这些概念...
6. **原型与继承**:JavaScript的面向对象特性主要通过原型链来实现,理解原型、构造函数、实例、继承等概念有助于创建复杂的程序结构。 7. **ES6及以上的新特性**:包括箭头函数、模板字符串、解构赋值、Promise、...
本论文主要论述了如何使用Python语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景...
本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景以及...
本论文主要论述了如何使用JAVA语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景以及...
Javascript 面向对象之非构造函数的继承 JavaScript对象与继承教程之内置对象(下) JavaScript对象及继承教程(上) javascript正则表达式(一) javascript正则表达式(二) JavaScript的10种跨域共享方法 JavaScript...
1. Java:由Sun Microsystems(现为Oracle公司)开发,Java是一种面向对象的、跨平台的编程语言,以其“一次编写,到处运行”的特性而著名。它被广泛应用在企业级应用、Android应用开发、服务器端编程等场景。Java的...
### Struts2 技术内幕读书笔记(1) #### WEB开发浅谈 ##### 面向对象浅谈 面向对象编程(Object-Oriented Programming,OOP)是一种软件开发范式,它通过模拟现实世界中的对象及其交互来构建程序结构。这种编程...
其次,系统采用了Java语言,这是一种广泛应用于企业级开发的面向对象语言,具有良好的跨平台性、稳定性和丰富的库支持。在本项目中,Java用于编写业务逻辑、处理用户请求以及与数据库交互。 数据库方面,虽然具体...
Java是一种广泛使用的面向对象的编程语言,其特点包括平台独立性、丰富的类库以及强大的内存管理机制。在这些学习笔记中,你可以深入理解Java的核心概念,包括语法、数据类型、控制结构、类与对象,以及异常处理等。...
《李炎恢JS笔记》是一份详实且深入的JavaScript学习资料,主要涵盖了JavaScript高级程序设计的核心概念和技术。这份笔记以其精炼而全面的内容,深受希望快速掌握JavaScript编程的学者们的喜爱。以下将对其中涉及的...