可维护的代码意味着:
可读的
一致的
可预测的
看上去就像是同一个人写的
已记录 命名函数表达式
(function fn(){})
他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含表达式 eval('(' + json + ')')
JSON字符串通常被包含在一个圆括号里,会让解析器强制将JSON的花括号解析成表达式而不是代码块 JavaScript核心
1.对象Object
Object是一个属性的集合,并且都拥有一个单独的原型对象[prototype object]. 这个原型对象[prototype object]可以是一个 object或者null值。 2.原型链__proto__
原型链是一个由对象组成的有限对象链用于实现继承和共享属性。
var a = {
x: 10,
calculate: function (z) {
return this.x + this.y + z
}
}; var b = {
y: 20,
__proto__: a
}; var c = {
y: 30,
__proto__: a
}; // 调用继承过来的方法
b.calculate(30); // 60 3.构造函数constructor
自动为创建的新对象设置了原型对象(prototype object) 。原型对象存放于 ConstructorFunction.prototype 属性中 。
// 构造函数
function fn(y) {
this.y = y;
}
// 继承属性"x"
Foo.prototype.x = 10;
var b = new Foo(20);
b.__proto__ === fn.prototype; // true // "fn.prototype"自动创建了一个特殊的属性"constructor",并指向b的构造函数本身
b.constructor === fn; // true
fn.prototype.constructor === fn // true 4.执行上下文
var a = function (e) {
return {
// 暴露公开的成员
add: function (x, y) {
}
};
}
调用:
ar o = new a('e');
o.add(2, 2); 引用全局变量
(function ($) {
调用:$
} (jQuery)); var o = (function ($) {
var my = {name = 'sn'}
return my;
})(jQuery);
调用:o.name 扩展
var o = (function (my) {
my.add = function () {};
return my;
} (obj)); 松耦合扩展
var o = o || {} ;
var o = (function (my) {
return my;
} (jQuery || {})); 克隆与继承
var o = (function (old) {
var my = {},key;
for (key in old) {
if (old.hasOwnProperty(key)) {
my[key] = old[key];
}
}
return my;
} (obj));
子模块
obj.sub = (function () {
var my = {};
return my;
} ());
函数语法
if (typeof Function.prototype.method !== "function") {
Function.prototype.method = function (name, call) {
this.prototype[name] = call;
return this;
};
}
扩展对象
var fn = function (name) {
this.name = name;
}
.method('get',
function () {
return this.name;
})
调用
var a = new fn('p');
a.get();
var app = app || {};
(function () {
app = {
isArray: isArray,
inArray: indexOf
};
} ());
// 第一个参数为要应用的function,第二个参数是需要传入的最少参数个数
function funcArgs(func, minArgs) {
if (minArgs == undefined) {
minArgs = 1;
}
function func(oargs) {
return function () {
// 优化处理,如果调用时没有参数,返回该函数本身
var args = Array.prototype.slice.call(arguments);
var nrgs = oargs.concat(args);
if (nrgs.length >= minArgs) {
return func.apply(this, nrgs);
} else {
//返回该函数本身
return func(nrgs);
}
};
}
return func([]);
}
//定义加法
var plus = funcArgs(function () {
var result = 0;
for (var i = 0; i < arguments.length; ++i) {
result += arguments[i];
}
return result;
}, 2);
//定义减法
var minus = funcArgs(function (x) {
var result = x;
for (var i = 1; i < arguments.length; ++i) {
result -= arguments[i];
}
return result;
}, 2); plus(3, 2) // 正常调用
plus(3) // 偏应用,返回一个函数(返回值为3+参数值)
plus(3)(2) // 完整应用(返回5)
plus()(3)()()(2) // 返回 5
plus(3, 2, 4, 5) // 可以接收多个参数
plus(3)(2, 3, 5) // 同理
        //添加方法(函数)
Function.prototype.method = function (name, fn) {
this.prototype[name] = fn;
return this;
};
//给构造函数添加方法
Array.method('filter', function (fn, obj) { var a = []; return a; });
//队列实现
window.Queue = function () { }
window.Queue
.method("add", function (a, b) { return a + b; })
.method("sub", function (a, b) { return a - b; });
//调用
var obj = new window.Queue();
console.log(obj.add(1, 2)); //3
console.log(obj.sub(3, 1)); //2
passport.pop = passport.pop || {};
passport.pop.insertScript = passport.pop.insertScript ||
function (b, a) {
var e = document,
c = e.createElement("script");
c.type = "text/javascript";
c.charset = "UTF-8";
if (c.readyState) {
c.onreadystatechange = function () {
if (c.readyState == "loaded" || c.readyState == "complete") {
c.onreadystatechange = null;
a && a()
}
}
} else {
c.onload = function () {
a && a()
}
}
c.src = b;
e.getElementsByTagName("head")[0].appendChild(c)
};

javascript高级语法学习的更多相关文章

  1. Swift高级语法学习总结(转)

    Swift高级语法学习总结 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参 ...

  2. Swift高级语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如 ...

  3. javascript高级实战学习

    学习目标: - 理解面向对象开发思想 - 掌握 JavaScript 面向对象开发相关模式 - 掌握在 JavaScript 中使用正则表达式 - typora-copy-images-to medi ...

  4. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

  5. JavaScript高级程序设计学习(四)之引用类型

    在javascript中也是有引用类型的,java同样如此. javascript常见也比较常用的引用类型就熟Object和Array. 一个对象和一个数组,这个在前后端分离开发中也用的最多.比如aj ...

  6. JavaScript高级程序设计学习(三)之变量、作用域和内存问题

    这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...

  7. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  8. C++ 高级语法学习与总结(代码实例)

     C++11增加了许多的特性,auto就是一个很明显的例子.  还有就是typedid()获取数据变量的类型 看下面简短的代码: atuo: 很像java中的加强for循环..... //获取一个数据 ...

  9. JavaScript高级程序设计学习(四)之引用类型(续)

    一.Date类型 其实引用类型和相关的操作方法,远远不止昨天的所说的那些,还有一部分今天继续补充. 在java中日期Date,它所属的包有sql包,也有util包.我个人比较喜欢用util包的.理由, ...

随机推荐

  1. python测试开发django-38.多对多(ManyToManyField)查询

    前言 一个学生可以对应多个老师,一个老师也可以教多个学生,这就是一种多对多的关系 models建表 新建一个老师表Teacher,和一个学生表Student class Teacher(models. ...

  2. poj 3071 Football(概率dp)

    id=3071">http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率 ...

  3. 记linux下rm误删bin文件的解决方式

    平常有个坏习惯,删文件为了快点,喜欢用rm xx*,删除一些关键词文件.今天为了删/bin下几个含有mix关键词的文件,使用命令rm mix*.手贱,mix和*之间多了个空格...灾难发生了!bin下 ...

  4. List与Array之间互换

    1 数组转换为List 调用Arrays类的静态方法asList. asList public static <T> List<T> asList(T... a) Return ...

  5. 《Excel效率手册:早做完,不加班》

    <Excel效率手册:早做完,不加班> 基本信息 作者: 陈锡卢    杨明辉 出版社:清华大学出版社 ISBN:9787302350743 上架时间:2014-5-8 出版日期:2014 ...

  6. [Web 前端] CSS篇之3. 如何保持浮层水平垂直居中

    原文链接](http://www.cnblogs.com/yaliu/p/5190957.html) 浮层水平垂直居中方法 (一)利用绝对定位与transform <div class=&quo ...

  7. JavaScript 中的异常处理

    考虑到 JS 中的错误可比服务器端的代码产生的错误要多得多,并且还难以发现及修正,所以 JS 代码必须有异常处理以及全局一场处理. try { //这段代码从上往下运行,其中任何一个语句抛出异常该代码 ...

  8. Java的并发编程中的多线程问题到底是怎么回事儿?

    在我之前的一篇<再有人问你Java内存模型是什么,就把这篇文章发给他.>文章中,介绍了Java内存模型,通过这篇文章,大家应该都知道了Java内存模型的概念以及作用,这篇文章中谈到,在Ja ...

  9. executing external native build for cmake

    进一步调试的方法: 在Android studio下方打开terminal,然后: gradlew build --stacktrace

  10. [转]MongoDB基本使用

    转自 : http://www.cnblogs.com/TankMa/archive/2011/06/08/2074947.html 成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可 ...