js面向对象

js 面向对象编程

[亡魂溺海] 提交于 2019-12-31 11:12:46
定义: 无序属性值的集合,属性可以是基本值,对象或者是函数。(数组也可以看做是对象,下标是属性名) 数据属性: configurable :表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性或者能否把属性修改为访问器属性。 enumerable:表示能否通过for-in循环返回属性。 writable:表示能否修改属性的值。 value:包含这个属性的数据值。 要修改属性默认的特性(前三个默认为true,最后一个默认为undefined,这也是为什么属性定义了而未初始化的时候是undefined的原因。)。必须使用Object.defineProperty()方法,这个方法接受三个参数,属性所在的对象、属性的名字和一个描述符对象(上面四个中的一个或者多个) 访问器属性 configurable,enumerable属性同上。 get:在读取属性时调用的函数; set:在设置属性时候使用的方法。 访问器属性不能直接定义,必须使用Object.defineProperty()来定义。 判断属性位置 通过in和hasOwnProperty()来确定属性是在原型中还是在对象中 in是沿着原型链一直寻找属性,而hasOwnProperty()只在当前对象中寻找。 三种遍历方式 for-in,Object.keys(),Object.getOwnPropertyNames()

JS中的this指向问题

折月煮酒 提交于 2019-12-26 07:12:47
原博客:https://www.cnblogs.com/pssp/p/5216085.html 首先必须要说的是, this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁 , 实际上this的最终指向的是那个调用它的对象( 这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉 ) ,那么接下来我会深入的探讨这个问题。   为什么要学习this?如果你学过面向对象编程,那你肯定知道干什么用的,如果你没有学过,那么暂时可以不用看这篇文章,当然如果你有兴趣也可以看看,毕竟这是js中必须要掌握的东西。 例子1: function a(){ var user = "追梦子"; console.log(this.user); //undefined console.log(this); //Window } a(); 按照我们上面说的this最终指向的是调用它的对象,这里的函数a实际是被Window对象所点出来的,下面的代码就可以证明。 function a(){ var user = "追梦子"; console.log(this.user); //undefined console.log(this);  /

javascript进阶笔记(1)

做~自己de王妃 提交于 2019-12-22 12:39:04
学习js已经有一段时间了,大大小小还是能够做出一些东西来。不过觉得可惜的是,还是对js本身这门语言不是很熟悉,总有一点雾里看花的感觉,看得见,但是看不清楚。最近发现有一本关于js的叫做《忍者秘籍》的书刊,听说是jQuery作者写的,可以让初级者进阶,哇啦啦,打怪兽,加经验升级,多好的事情。于是,就有了此篇文章及其后续。闲话休谈,正事要紧! javascript是一门函数式语言(functional language)。最重要的,在js中, 函数 是 第一型对象(first-class object) ,也就是说,函数可以共处,可以将其视为其他任意类型的javascript对象。就像普通的js数据类型,函数可以被任意变量进行引用,或声明成对象字面量,甚至可以将其作为函数参数进行传递。 函数的第一型对象体现在: 1、它们可以通过字面量进行创建; 2、它们可以赋值给变量、数组或其他对象的属性; 3、它们可以作为参数传递给函数; 4、它们可以作为函数的返回值进行返回; 5、它们拥有动态创建并赋值的属性。 函数除了以上的功能外,它还包含一个功能,它们可以被调用。千万不要小瞧了函数的调用!因为不同的调用机制会产生不同的功效,特别是针对函数的this关键字。 当我们定义了一个函数,以便其他一些代码在适当的时候回头调用它,我们可以称之为回调。回调是高效利用js必不可少的一部分。

JS中函数的调用和this的值

谁说胖子不能爱 提交于 2019-12-17 19:10:51
调用每一个函数会暂停当前函数的执行,传递控制权和参数给新函数。除了声明时定义的形式参数,每个函数还接收两个附加的参数: this 和 arguments 。 参数this在面向对象编程中非常重要,他的值取决于调用的模式。 在JS中一共有4中调用模式:方法调用模式、函数调用模式、构造器调用模式和apply调用模式。这些模式在如何初始化关键参数this上存在差异。 方法调用模式   当一个函数被保存为对象的一个属性时,我们称为一个方法。当一个方法被调用时,this被绑定到该对象。 var myObject = { value: 0, increment: function(inc){ this.value += typeof inc === "number" ? inc : 1; } }; myObject.increment(); console.log(myObject.value); // 1 myObject.increment(3); console.log(myObject.value); // 4 函数调用模式   当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用。以此模式调用函数时,this被绑定到全局对象。有一个很容易的解决方案:如果该方法定义一个变量并给它赋值 为this,那么内部函数就可以通过那个变量访问到this。 var value = 122;

JS学习笔记01-对象类型

泪湿孤枕 提交于 2019-12-17 05:47:29
JavaScript是一种"动态类型"语言,变量没有类型限制,可以随时更改类型,可以随时赋予任意值。 本文主要记录两大类常见类型: 原始类型:boolean、number、string 合成类型:Object、Function、Array 一、原始类型 1.1、boolean 1.1.1 相关方法 none 1.1.2 重点难点 none 1.1.3 类型转换 Boolean()函数可以将任意类型的值转为布尔 它的转换规则相对简单:除了五个值( null 、 undefined 、 0 、 NaN 、 空字符串 )的转换结果为false,其他的值全部为true。注意所有对象(包括空对象)的转换结果都是true,连 false 对应的对象 new Boolean(false) 也是true。 1.2、number 1.2.1 相关方法 parseInt:用于将字符串转为整数 parseFloat:用于将一个字符串转为浮点数 1.2.2 重点难点 JS内部所有数字都是以64位浮点数形式储存,即使整数也是如此 : 第1位:符号位, 0 表示正数, 1 表示负数 第2位到第12位(共11位):指数部分 第13位到第64位(共52位):小数部分(即有效数字) 所以 1 与 1.0 是严格相同的。又因浮点数不是精确的值,所以涉及小数比较和运算要小心。如 (0.3-0.2)===(0.2-0.1

js学习:函数

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-16 23:45:24
概述 函数的声明 JavaScript 有三种声明函数的方法 function 命令 function命令声明的代码区块,就是一个函数。function命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。 这叫做函数的声明(Function Declaration)。 function print(s) { console.log(s); } 函数表达式 除了用function命令声明函数,还可以采用变量赋值的写法。 var print = function(s) { console.log(s); }; 这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式(Function Expression),因为赋值语句的等号右侧只能放表达式。 采用函数表达式声明函数时,function命令后面不带有函数名。如果加上函数名,该函数名只在函数体内部有效,在函数体外部无效。 var print = function x(){ console.log(typeof x); }; // ReferenceError: x is not defined print() // function 上面代码在函数表达式中,加入了函数名x。这个x只在函数体内部可用,指代函数表达式本身,其他地方都不可用。这种写法的用处有两个,一是可以在函数体内部调用自身

JS闭包

血红的双手。 提交于 2019-12-15 20:07:56
函数与对其状态即 词法环境 ( lexical environment )的引用共同构成 闭包 ( closure )。也就是说,闭包可以让你从内部函数访问外部函数作用域。在JavaScript,函数在每次创建时生成闭包。 词法作用域 请看下面的代码: function init() { var name = "Mozilla"; // name 是一个被 init 创建的局部变量 function displayName() { // displayName() 是内部函数,一个闭包 alert(name); // 使用了父函数中声明的变量 } displayName(); } init(); init() 创建了一个局部变量 name 和一个名为 displayName() 的函数。 displayName() 是定义在 init() 里的内部函数,仅在该函数体内可被获取。请注意, displayName() 内没有自己的局部变量,然而它可以访问到外部函数的变量,所以 displayName() 可以使用父函数 init() 中声明的变量 name 。 运行该代码后发现, displayName() 内的 alert() 语句显示出了 name 变量的值(该变量在父函数中声明)。这个 词法作用域 的例子描述了引擎是如何解析嵌套函数中的变量的。词法(lexical)一词表明

js快速学习思维导图

僤鯓⒐⒋嵵緔 提交于 2019-12-11 10:09:05
Js给初学者的印象总是那么的“杂而乱”,相信很多初学者都在找轻松学习Js的途径。在这里给大家总结一些学习Js的经验,希望能给后来的学习者探索出一条“轻松学习Js之路”。 Js给人那种感觉的原因多半是因为它如下的特点: A:本身知识很抽象、晦涩难懂(真的难懂),如:闭包、内置对象、DOM。 B:本身内容很多,如函数库、对象库就一大堆。 (内容五花八门 ) C:混合多种编程思想。它里面不但牵涉面向过程编程思想,又有面向对象编程思想,同时,它的面向对象还和别的编程语言(如:C++,JAVA,PHP)不大一样。就好像又是新的一样,让你对曾经学的面向对象产生了怀疑… D:辛苦学习后又看似和实际应用脱节。通常学了很久的js基础之后,变量、函数、对象你也都略知一二,但一到公司开发项目的时候,却又难以下手。因为公司在开发实际项目的时候通常都是直接用它的衍生库,如:jquery,angular,boostrap,amaze,layui,ueditor等,而这些库又多如牛毛,同时还有自己的难点。让你都不知道该学哪个好,甚至都怀疑自己学的是不是js了,好像有多个版本的js一样,总是学不完… 那么,怎么才能在js领域内学的轻松甚至游刃有余呢?我总结了一些实战意义的js学习经验: 1.首先要紧紧抓住它的地位 时刻都不能忘记,否则很容易犯“一叶障目不见泰山”的错误。不要学了很久就知道js是编程语言,就是写代码

js学习:函数

拈花ヽ惹草 提交于 2019-12-06 07:21:38
概述 函数的声明 JavaScript 有三种声明函数的方法 function 命令 function命令声明的代码区块,就是一个函数。function命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。 这叫做函数的声明(Function Declaration)。 function print(s) { console.log(s); } 函数表达式 除了用function命令声明函数,还可以采用变量赋值的写法。 var print = function(s) { console.log(s); }; 这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式(Function Expression),因为赋值语句的等号右侧只能放表达式。 采用函数表达式声明函数时,function命令后面不带有函数名。如果加上函数名,该函数名只在函数体内部有效,在函数体外部无效。 var print = function x(){ console.log(typeof x); }; x // ReferenceError: x is not defined print() // function 上面代码在函数表达式中,加入了函数名x。这个x只在函数体内部可用,指代函数表达式本身,其他地方都不可用。这种写法的用处有两个,一是可以在函数体内部调用自身

JS面向对象

雨燕双飞 提交于 2019-12-04 18:21:27
一. JavaScript面向对象前言 1.1 什么是对象? Everything is object (万物皆对象)。 对象到底是什么,我们可以从两个层次来理解。 对象是单个事物的抽象 一本书、一辆汽车、一个人都可以是对象,一个数据库、一张网页、一个与远程服务器的连接也可以是对象。当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 对象是一个容器,封装了属性(property)和方法(method) 属性是对象的状态,方法是对象的行为(完成某种任务)。比如,我们可以把动物抽象为animal对象,使用“属性”记录具体是那一种动物,使用“方法”表示动物的某种行为(奔跑、捕猎、休息等等) 在实际开发中,对象是一个抽象的概念,可以将其简单理解为 : 数据集或功能集。 1.2 什么是面向对象? 面向对象只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性 小编的理解:面向对象就是说,使用对象的时候,你可以直接使用它所提供的功能而忽略其内部组成情况。面对对象不一定只有在编程界里才有,我们生活中无处不在;比如说,你家里的电视机,你使用了遥控,就能操作电视机,但是你实际上不知道这台电视机里面是什么零件组成的,你只要知道,我拿到遥控就可以操作电视机就好了。这就是一种面向对象的思想。 1.2.1 什么是面向对象编程? 面向对象编程 ——