JS高级程序设置笔记(二)
function num(){var text = "mom and dad and baby";var pattern=/mom( and dad (and baby)?)?/gi;var matches = pattern.exec(text);document.write(matches.index);document.write(matches.input);document.write(matches[0]);document.write(matches[1]);document.write(matches[2]);}num();
5.4.3 RegExp构造函数属性
长属性名 短属性名 说明
input $_ 最近一次要匹配的字符串。
匹配字符串开始和结尾的/A和/Z锚 支持插入符号(^)和美元符号($) |
向后查找(lookbehind)支持向前查找lookahead
|
并集合交集类
|
原子组
|
unicode支持(单个字符除外)
|
命名的捕获组(但是支持标号的捕获组)
|
s(single,单行)和X (free-spacing,无间隔)匹配模式
|
条件匹配
|
使用正则表达式注释
|
function sum(num1,num2){return num1+num2;};var sun=function(num1,num2){return num1+num2;}
function callSomeFunction(someFunction,someArgument){return someFunction(someArgument);}function add10(num){return num+10;}var result = callSomeFunction(add10,10);alert(result);
5.5.4函数的内部属性
//阶乘 递归函数function factorial(num){if(num>=1){return 1; }else{return num*factorial(num-1); }};
耦合性太强,消除耦合性
function factorial(num){if (num >= 1) {return 1; } else {return num * arguments.callee(num-1); } };</script>
使用了arguments.callee方法:
//创建一个对象var person={name:"gavin",age:"23",job:"IT engineer"}person.sayHey=function(name){alert("Hello"+name);}document.write(person.age+person.job+person.name);person.sayHey("JJ");
用这段代码来理解对象、属性、方法:
Object.defineProperty(person,"name",{writable:true,//这里如果填的是false 的话就不能通过.属性来冲新设置值了例:person.name="gavin"//不会修改属性value:"zhihao"});person.name="gavin";
Object.defineProperty(person,"age",{get :function(){return this.age; },set:function(val){this.age=val; }});
6.1.2定义多个属性
var book={};Object.defineProperties(book,{_year:{value:2004},_edition:{value:1},year:{get:function(){return this._year; },set:function(NewValue){if(NewValue>2004){this._year=NewValue;this._edition+=NewValue-2004; } } }})
var d = Object.getOwnPropertyDescriptor(book,"_year");
6.2创建对象
function Person(name,age,job){this.name=name;this.age=age;this.job=job;this.sayHi=function(someOne){alert(this.name+"say Hello to"+someOne); }}
用java的编程思想来理解这个:创建了一个Person类,而不是再使用Object类,他其实就相当于一个框架,this相当于当前的类,我们可以通过New 来创建一个Person类的对象
function Person(name,age,job){this.name=name;this.age=age;this.job=job;this.sayHi=function(someOne){alert(this.name+"say Hello to"+someOne); }} var person = new Person("gavin",23,"it");document.write(person.age+" "+person.name+" "+person.job);
2:当普通函数调用
function Person(){Person.prototype.name="gavin";Person.prototype.age=23;Person.prototype.job="software engineer";Person.prototype.sayName=function(){ aler(this.name); }}
这就是一个原型的构造函数。
function Person(){}Person.prototype={name:"gavin",age:23,job:"software engineer",sayName:function(){alert(this.name); }}
和上面的创建方法有一点不同的是constructor属性不在指向这个Person了。
function Person(name,age,job){this.name=name;this.age=age;this.job=job;
}
var Person = { name: "gavin", friends: ["a", "b", "c"]};var onePerson = Object(Person);onePerson.name = "zzh";onePerson.friends.push("d"); var otherPerson = Object(onePerson);otherPerson.name = "zzh";otherPerson.friends.push("E");alert(Person.friends);
会丰富模板
在外部无法获取到func3内部的局部变量,但是func3内部的局部方法func4却可以获取到,因此 返回一个func4的引用 ,这样在外部通过这个func4就可以获取到func3的内部变量。
虽然是绕了一个圈子,但是在方法外部却通过这样一个手段获取到了内部的值。
而这个方法内的局部方法func4就叫做闭包,按照很多书上的概念,这个方法搭建了方法内部与方法外部的桥梁,使得在外部也可以任意的获取到方法内部的资源。
但是闭包会造成变量在内存中持久占用,因此会有一定的性能问题,最好不要轻易使用,即便使用也要在恰当的实际进行释放。
转载于:https://www.cnblogs.com/gavinzzh-firstday/p/5338982.html
JS高级程序设置笔记(二)相关推荐
- 微信小程序开发笔记二(WXSS和CSS样式美化)
微信小程序开发笔记二(WXSS和CSS样式美化) 一.CSS基本知识 1.Class选择器的定义 2.ID选择器的定义 3.ID选择器和class选择器的区别 4.CSS中设置颜色 5.CSS中的文本 ...
- JS高级程序设计——阅读笔记四
JS高级程序设计--阅读笔记四 第六章 集合引用类型 6.1 Object 6.2 Array 6.2.1 创建数组 from()函数 6.2.2 数组空位 6.2.3 数组索引 6.2.4 检测数组 ...
- JS高级程序设计读书笔记(第十三章 事件)
第十三章 事件 JavaScript 与 HTML 之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代 ...
- 微信小程序开发笔记二—底部导航栏tabar
文章目录 一.实现效果 二.实现方法 1.准备图标 2.app.json文件添加新页面 3.app.json中添加tabar组件 三.注意事项 一.实现效果 首先展示一下实现效果 底部导航栏有三个按键 ...
- JS高级——模块化学习笔记
一.什么是模块化? 到底什么是模块化.模块化开发呢? 事实上模块化开发最终的目的是将程序划分成一个个小的结构: 这个结构中编写属于自己的逻辑代码,有自己的作用域,不会影响到其他的结构: 这个结构可以将 ...
- 微信小程序学习笔记(二)模板与配置
文章目录 1. WXML 模板语法 1.1 数据绑定 1.1.1 数据绑定的基本原则 1.1.2 在 data 中定义页面的数据 1.1.3 Mustache 语法的格式 1.1.4 Mustache ...
- 微信小程序开发笔记(二)
1.import和include import是用来导入模板. includes用来导入除模板以外的内容. 2.wxss引用 @import './test_0.wxss' 3.App构造器 App( ...
- JS高级程序设计读书笔记(第五章 引用变量)
第五章 引用变量 Object 创建 Object 实例的方式有两种.第一种是使用 new 操作符后跟 Object 构造函数,另一种方式是使用对象字面量表示法. var person = new O ...
- uni-app/js/小程序/生成支付二维码图片,类似于支付宝和微信商家码
业务需求 一个电子商务公司需要一个支付功能,该支付功能通过微信扫码或者支付宝扫码实现的,并且该二维码商户可以下载下来,类似于微信商家码.如下图,鉴于公司相关的保密协议,我马赛克了头部和中间的商标相关说 ...
最新文章
- 你还在用GDB调试程序吗?
- 手把手教你ARC——iOS/Mac开发ARC入门和使用
- 数据库SQL的分组函数
- Centos安装postgreSQL
- 技术部门Leader是不是一定要技术大牛担任?
- linux启动顺序怎么修改,怎样修改启动顺序?
- logback 的 access 模块
- Android—WebView与JS交互
- LeetCode 664. 奇怪的打印机(区间DP)
- Python Numpy中transpose()函数的使用
- 一种动态阈值白平衡算法实现
- 软件测试方法——单元测试、集成测试、系统测试、确认测试
- openBravo数据库结构分析
- Navicat设置mysql时间字段自动获取当前时间
- 读书笔记:吉檀迦利:致我们无处安放的心灵
- 人工智能在医药行业的应用
- 图解网络:组建一个网络需要用到哪些硬件设备?
- js moment.js 给定时间 获取自然月、周的时间轴
- 2018.06.16软件更新公告
- 国内AI众包竞赛加速发展,云计算成助推器
热门文章
- JVM调优:常见垃圾回收器及常见组合
- Scala重写父类普通方法
- Python3空字符串和len()函数
- 非公平锁和公平锁在reetrantlock里的实现过程是怎样的
- matlab二维矩阵可视化几种方法
- python 消息队列如何接收处理_python使用消息队列RabbitMq(进阶)
- Centos7安装tengine-2.3.2版本
- springboot项目启动后找不到jsp文件
- matlab oqpsk,如何用MATLab画OQPSK星座?
- redis php扩展 linux,linux下为php安装redis扩展phpredis