0.33 js 带下划线的属性名,或变量名 - cwy007/tips-and-skills GitHub Wiki
__proto__
1.根据语言标准,__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 的一些术语
- 耦合 Coupling
- 去耦合 Decoupling
- 发布 publish
- 订阅 subscribe
- 流程控制方式:并行,串行,并行/串行
- Promise接口的基本思想是,异步任务返回一个Promise对象
- 状态:未完成 pending,已完成 resolved/fulfilled,失败 rejected
- 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';
- 报错
- 一般模式:默默地错误
- 调用栈
fn.callee、fn.caller
- 联动关系
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');