0.33 js 带下划线的属性名,或变量名 - cwy007/tips-and-skills GitHub Wiki

1. __proto__

根据语言标准,__proto__属性只有浏览器才需要部署,其他环境可以没有这个属性,

而且前后的两根下划线,表示它本质是一个内部属性,不应该对使用者暴露。

2. 私有变量

使用“立即执行函数”(Immediately-Invoked Function Expression,IIFE),将相关的属性和方法封装在一个函数作用域里面,可以达到不暴露私有成员的目的。

var module1 = (function () {
 var _count = 0;
 var m1 = function () {
   //...
 };
 var m2 = function () {
  //...
 };
 return {
  m1 : m1,
  m2 : m2
 };
})();

上面的module1就是JavaScript模块的基本写法

3. timer 定时器

document.getElementById('my-ok').onkeypress = function() {
  var self = this;
  setTimeout(function() {
    self.value = self.value.toUpperCase();
  }, 0);
}

上面代码将代码放入setTimeout之中,就能使得它在浏览器接收到文本之后触发。

link: http://javascript.ruanyifeng.com/advanced/timer.html

4. js 的一些术语

  1. 耦合 Coupling
  2. 去耦合 Decoupling
  3. 发布 publish
  4. 订阅 subscribe
  5. 流程控制方式:并行,串行,并行/串行
  6. Promise接口的基本思想是,异步任务返回一个Promise对象
  7. 状态:未完成 pending,已完成 resolved/fulfilled,失败 rejected
  8. item 成员

5. Ajax操作

Ajax操作是典型的异步操作,传统上往往写成下面这样。

function search(term, onload, onerror) {
  var xhr, results, url;
  url = 'http://example.com/search?q=' + term;

  xhr = new XMLHttpRequest();
  xhr.open('GET', url, true);

  xhr.onload = function (e) {
    if (this.status === 200) {
      results = JSON.parse(this.responseText);
      onload(results);
    }
  };
  xhr.onerror = function (e) {
    onerror(e);
  };

  xhr.send();
}

search("Hello World", console.log, console.error);

link:http://javascript.ruanyifeng.com/advanced/promise.html

6. 'use strict';

  1. 报错
  2. 一般模式:默默地错误
  3. 调用栈 fn.callee、fn.caller
  4. 联动关系

link: http://javascript.ruanyifeng.com/advanced/strict.html

7. 原型链示例

// 数组的继承链
myArray --> Array.prototype --> Object.prototype --> null

// NodeList的继承链
myNodeList --> NodeList.prototype --> Object.prototype --> null

link: http://javascript.ruanyifeng.com/dom/node.html

7. 文档

文档的锚点(#anchor)

二级域名的情况下,domain属性可以设置为对应的一级域名。比如,当前域名是sub.example.com,则domain属性可以设置为example.com

如果将新的网址赋值给location对象,网页就会自动跳转到新网址。

document.location = 'http://www.example.com';
// 等同于
document.location.href = 'http://www.example.com';

也可以指定相对URL。

document.location = 'page2.html';

如果指定的是锚点,浏览器会自动滚动到锚点处。

document.location = '#top';
// 选中data-foo-bar属性等于someval的元素
document.querySelectorAll('[data-foo-bar="someval"]');

// 选中myForm表单中所有不通过验证的元素
document.querySelectorAll('#myForm :invalid');

// 选中div元素,那些class含ignore的除外
document.querySelectorAll('DIV:not(.ignore)');

// 同时选中div,a,script三类元素
document.querySelectorAll('DIV, A, SCRIPT');