JavaScript 心灵鸡汤
来源:互联网 发布:剑三五毒捏脸数据 编辑:程序博客网 时间:2024/06/05 19:03
JavaScript相关架构源码知识总结
原型
在我们众所周知的js框架中,原型随处可见。js不包含传统的类继承模型,而是使用prototype原型模型,接下来的js框架,包括jquery的插件源码的解读和学习中,我们也会看到原型的使用。假如你看到这篇文章,希望你对js有足够的认识。
原型链的继承方式:
function Foo() { this.value = 42;}Foo.prototype = { method: function() {}};function Bar() {}// 设置Bar的prototype属性为Foo的实例对象Bar.prototype = new Foo();Bar.prototype.foo = 'Hello World';// 修正Bar.prototype.constructor为Bar本身Bar.prototype.constructor = Bar;var test = new Bar() // 创建Bar的一个新实例// 原型链test [Bar的实例] Bar.prototype [Foo的实例] { foo: 'Hello World' } Foo.prototype {method: ...}; Object.prototype {toString: ... /* etc. */};
上面的例子中,test 对象从 Bar.prototype 和 Foo.prototype 继承下来;因此,它能访问 Foo 的原型方法 method。同时,它也能够访问那个定义在原型上的 Foo 实例属性 value。 需要注意的是 new Bar() 不会创造出一个新的 Foo 实例,而是 重复使用它原型上的那个实例;因此,所有的 Bar实例都会共享相同的 value 属性。
this的工作原理
JavaScript 有一套完全不同于其它语言的对 this 的处理机制。 在五种不同的情况下 ,this 指向的各不相同。
全局范围内
this;
全局范围内
this;
当在全部范围内使用 this,它将会指向全局对象。
函数调用
foo();
这里 this 也会指向全局对象。
foo();
这里 this 也会指向全局对象。
方法调用
test.foo();
这个例子中,this 指向 test 对象。
调用构造函数
new foo();
如果函数倾向于和 new 关键词一块使用,则我们称这个函数是 构造函数。 在函数内部,this 指向新创建的对象。
显式的设置 this。
因此函数调用的规则在上例中已经不适用了,在foo 函数内 this 被设置成了 bar。
test.foo();
这个例子中,this 指向 test 对象。
调用构造函数
new foo();
如果函数倾向于和 new 关键词一块使用,则我们称这个函数是 构造函数。 在函数内部,this 指向新创建的对象。
显式的设置 this。
function foo(a, b, c) {}var bar = {};foo.apply(bar, [1, 2, 3]); // 数组将会被扩展,如下所示foo.call(bar, 1, 2, 3); // 传递到foo的参数是:a = 1, b = 2, c = 3当使用 Function.prototype 上的 call 或者 apply 方法时,函数内的 this 将会被显式设置为函数调用的第一个参数。
因此函数调用的规则在上例中已经不适用了,在foo 函数内 this 被设置成了 bar。
看下面代码:
Foo.method = function() {
var that = this;
function test() {
// 使用 that 来指向 Foo 对象
}
test();
}
that 只是我们随意起的名字,不过这个名字被广泛的用来指向外部的 this 对象。
function test() {
// 使用 that 来指向 Foo 对象
}
test();
}
that 只是我们随意起的名字,不过这个名字被广泛的用来指向外部的 this 对象。
闭包和引用
闭包是 JavaScript 一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域中的变量。 因为函数是 JavaScript 中唯一拥有自身作用域的结构,因此闭包的创建依赖于函数。如果读过laravel(很流行的PHP框架),里面大部分都使用了闭包**!。代码比较:
for(var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); }, 1000);}
for(var i = 0; i < 10; i++) { (function(e) { setTimeout(function() { console.log(e); }, 1000); })(i);}用过jquery的老铁们肯定都知道自执行匿名函数。
阅读全文
0 0
- JavaScript 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- 心灵鸡汤
- EXCEL如何做类似省市联动的二级选择菜单?
- 设计模式-Iterator理解
- pat 中求解最长回文串的长度
- 二叉树的先序遍历BTPreorderTraversal
- simCard 学习总结
- JavaScript 心灵鸡汤
- Leetcode 79 Word Search
- 2017.06.20
- 安装TensorFlow
- OC代码编译,链接,执行过程 02
- TCP网络编程中的listen
- Climbing Stairs
- IE浏览器调用OCX控件的一般方法
- 设计模式之---原型模式