js面向对象

《你不知道的JavaScript》:js中为什么没有类?

蹲街弑〆低调 提交于 2019-11-28 20:29:10
类–是一种代码的组织结构形式,是一种在软件中对真实世界中问题领域的建模方法。类有三个核心概念:封装、继承和多态。 面向对象编程强调的是数据和操作数据的行为本质上是互相关联的(当然不同的数据可能有不同的行为),因此好的设计就是数据以及和它相关的行为打包起来(也就是 封装 起来),这在正式的计算机科学中有时被称为 数据结构 。 例如用来表示一个单词的一串字符通常被称为字符串。其中字符就是数据,而应用在这些数据上的行为(比如计算长度、添加数据、搜索),就被设计成了 String 类的方法。所有字符串都是 String 类的实例,可以说这个字符串是一个包裹,包含字符数据和可以应用在这个数据上的函数(行为或者方法)。 可以通过类来对数据结构进行分类,比如汽车类,它是交通工具类的一个特例,后者是更广泛的类。 可以在软件中定义一个汽车类 Car 和交通工具类 Vehicle 来对这种关系建模。 Vehicle 的定义包括引擎、载人能力等,这些应该算是 Vehicle 类的方法。 Vehicle 定义是几乎所有类型的交通工具都包含的东西。 在软件中,对不同的交通工具重复定义载人能力等方法是没有意义的,只要在 Vehicle 类定义一次,然后在 Car 类时,只要声明它继承(或扩展)了 Vehicle 类的基础定义就行。 Car 类的定义就是对通用 Vehicle 类定义的特殊化。 这里要注意,尽管

JavaScript面试题

好久不见. 提交于 2019-11-28 14:32:24
JS相关问题 数组去重 function uniq(array){ var temp = []; //一个新的临时数组 for(var i = 0; i < array.length; i++){ if(temp.indexOf(array[i]) == -1){ temp.push(array[i]); } } return temp; } var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5]; console.log(aa) console.log(uniq(aa)) 1、谈一谈JavaScript作用域链 当执行一段JavaScript代码(全局代码或函数)时,JavaScript引擎会创建一个作用域又称为执行上下文(Execution Context),在页面加载后会首先创建一个全局的作用域,然后每执行一个函数,会建立一个对应的作用域,从而形成一条作用域链。每个作用域都有一条对应的作用域链,链头是全局作用域,链尾是当前函数作用域。 作用域链的作用是用于解析标识符,当函数被创建时(不是执行),会将this,arguments,命名参数和该函数中所有局部变量添加到该当前作用域中,当JavaScript需要查找变量X的时候(这个过程称为变量解析),它首先会从作用域链中的链尾也就是当前作用域进行查找是否有X属性,如果没有找到就顺着作用域链继续查找,直到查找到链头

JS Function对象札记

有些话、适合烂在心里 提交于 2019-11-28 06:22:33
Function对象 对象中的函数(方法) 当一个函数被保存为对象的一个属性时,我们称它为一个方法,当一个方法被调用时,this被绑定到该对象。 方法可以使用this访问自己所属的对象; return 一个函数纵使会返回一个值。如果没有指定返回值,则返回 undefined。 如果函数调用时在前面加上了 new 前缀,且返回值不是一个对象, 则返回 this(该新对象); 在jquery的on方法下,得到绑定函数的返回值; var returnValue; //通过变量来存储函数的返回值; function a(){ return 123456; } $(".h1").on("click",function a(){ returnValue = a(); alert(returnValue); // 123456 }); 方法调用模式 当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时, this被绑定到该对象。 如果调用表达式包含一个提取属性的动作(既包含一个 . 点表达式或[subscript]下标表达式),那么它就是被当作一个方法来调用; 函数调用模式 当一个函数并非一个对象的属性时,那么它就是被当作一个函数来调用的: var sum = add(3, 5); // sum的值为8; 以此模式调用函数时,this 被绑定到全局对象

js面向对象入门

[亡魂溺海] 提交于 2019-11-27 20:52:38
  通常我们写js以及调用: function init(){ console.log("init") } function load(){ console.log("load") } init(); load();   在页面的script标签对里定义两个function,然后执行一下函数名即可。如果我们还要定义一些变量,或者别的函数啥的 ,则继续按照语法往下写。久而久之,这个页面函数不计其数,分不清哪些函数是同属一个功能,哪些函数同属另一个功能,这样很明显不友好,我之前就在几千行的js中找某个功能的N个方法,大多在一块,个别不在,很难找,特费劲。   大概是出身后端的原因,对面向对象有一定的理解,后来知道javascript也可以面向对象编程,一些写法自然也就有所变化了~   既然是面向对象编程,那么一切皆对象,我们就用对象这个点来阐述下面要讲到的面向对象编程。   什么是对象?=>万物皆对象。   对象的特征是什么=>具有一系列的属性和方法。   所以我们在进行面向对象编程的时候,重点看属性和方法。   javascript创建对象有三种方式,分别是字面量方式、函数方式、原型方式: //字面量方式 var obj1={ init:function(){ console.log("init1") } }; obj1.init(); //函数方式 var obj2

js学习之面向对象

拟墨画扇 提交于 2019-11-27 06:10:17
一、创建对象的方法 1、 {} 字面量创建 var person ={ name: "lisi", age: 21, say: function(){ alert(this.name); } }; 2、 new Object() var person = new Object(); person.name = "lisi"; person.age = 21; person.family = ["lida","lier","wangwu"]; person.say = function(){ alert(this.name); } 3: 用构造函数创建 function Person(name,age,family) { this.name = name; this.age = age; this.family = family; this.say = function(){ alert(this.name); } } var person1 = new Person("lisi",21,["lida","lier","wangwu"]); var person2 = new Person("lisi",21,["lida","lier","lisi"]); console.log(person1 instanceof Object); //true console.log

怎么理解js的面向对象编程

我的未来我决定 提交于 2019-11-26 23:56:24
面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装、继承、多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义JS中对象:无序属性的集合,其属性可以包含基本值、对象或者函数。可以简单理解为JS的对象是一组无序的值,其中的属性或方法都有一个名字,根据这个名字可以访问相映射的值(值可以是基本值/对象/方法)。 官方解释 原型模式如类模式一样,都是是一种编程泛型,即编程的方法论。另外最近大红大紫的函数编程也是一种编程泛型。JavaScript之父Brendan Eich在设计JavaScript时,从一开始就没打算为其加入类的概念,而是借鉴了另外两门基于原型的的语言:Self和Smalltalk。   既然同为面向对象语言,那就得有创建对象的方法。在类语言中,对象基于模板来创建,首先定义一个类作为对现实世界的抽象,然后由类来实例化对象;而在原型语言中,对象以克隆另一个对象的方式创建,被克隆的母体称为原型对象。 一、理解对象: 第一种:基于Object对象 var person = new Object(); person.name = 'My Name'; person.age = 18; person.getName = function(){ return this.name; } 第二种

js.面向对象

与世无争的帅哥 提交于 2019-11-26 19:52:32
一.什么是面向对象? 面向对象:一种编程思想,在程序里面用对象来描述现实中一个具体的事务 对象:封装了一个事务的属性和功能的程序结构 why oop:和现实中人的想法非常接近,便于大程序的维护 面向对象的三大特点: 封装,继承,多态 封装(创建自定义对象) 创建自定义对象有三种方法: 1、使用对象的直接量 var obj = { 属性名:属性值, ...:..., 方法名:function(){ .. this.属性名... this.方法名().. }, ...:..., } 这里有有一个关键字this 对象自己的方法,要访问自己的属性,必须用this.属性名!!!!!!! this 就是引用正在调用函数对象的关键词,就是点(.)前面的对象 why:方法中不加this的变量,默认仅在作用域链中找,不会去对象中查找 when:只要对象的方法想要用自己的属性,必须加this 2.使用new方法创建:( 在创建对象时候,暂时不知道对象的成员 ) var obj = new Object();//创建一个空对象 ,可以简写为 new Object 或Object() 向空对象中添加属性和方法: obj.属性名= 属性值 obj.方法名=function(){...this.属性名...} 对象本质:js中的一切对象的底层都是关联数组 每个属性/方法 都是关联数组中的元素value

JavaScript学习

萝らか妹 提交于 2019-11-26 18:10:53
一、JavaScript 简介 一、JavaScript语言的介绍:JavaScript是 基于对象和原型 的一种 动态、弱类型 的 脚本语言 二、JavaScript语言的组成: JavaScript是由核心语法(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)组成的 三、JavaScript语言的应用: 实现页面表单验证以及页面交互特效,基于Node.js技术进行服务器端编程等 二、JavaScript ECMAScript 一:基础语法 一:变量 1. 变量的声明 1. var变量:var 变量名 = 值; 2. let变量:let 变量名 = 值; 3. const变量:const 变量名 = 值; 2. 变量的作用域 1. 全局作用域:代码中任何地方都能访问到 2. 局部作用域:在固定的代码片段内可访问到 3. 变量提升:变量在声明之前就访问,var会使用默认值undefined,而let会直接报错 4. var、let、const区别 二:运算符 1. 算数运算符:加(+),减(-),乘(*),除(/),求余(%) 2. 赋值运算符:=,+=,-=,*=,%= 3. 关系运算符:>,<,>=,<=,==(只比较值),!=,===(值和数据类型都比较) 4. 逻辑运算符:[&&,||](只有左侧满足才计算右侧),!,[&,|](不管左侧结果如何