解惑js中的prototype

平时node中在人家源码里往往会看到prototype,之前百度了下说的是原型方法,也没有细看,今天决定好好把这块知识点学习一下。结合网上的资料,把prototype的定义精简一下:js中每个函数都有一个默认的prototype属性,这个属性是另一个对象(我们称之为‘原型对象’)的引用,换句话说,其实prototype属性就是一个对象。这个原型对象的所有属性和方法,都会被构造函数的实例继承。

说了定义,那我们来看什么时候使用prototype呢?这篇博文对这部分讲的很清楚。按照他的例子举个例,在传统的实例化出来的对象要使用属性或方法时,我们事先是这样构造一个‘类’(为了好理解暂叫类吧):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Student(){
this.friends = []; //实例变量
this.read=function(){ //实例方法
var bookName = '代码与艺术';
console.log('我要读' + bookName);
}
}

var fengyun = new Student();
fengyun.friends.push('lauchunpung');
fengyun.read();
console.log(fengyun.friends); //['lauchunpung']

var andy = new Student();
andy.friends.push('zhuliqian');
andy.read();
console.log(andy.friends); //['zhuliqian']

Read More

学习js中的this用法

通过这几个月在node.js上的工作,发现js其实并不是那么简单,而且感觉上越来越深,比如现在要笔记的一个坑——this,因为之前用过C++对this有一定的了解,其就是指向当前对象,而javascript中的this,因其弱语言的灵活性,它被赋予了更多的作用和使用范围。由于其运行期绑定的特性,它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式,下面根据网上的文章作了一个归纳,方便日后温习。

一般而言,在Javascript中,this指向函数执行时的当前对象,该关键字在Javascript中的执行环境,而非声明环境有关。

##1.作为单纯的函数调用

1
2
3
4
5
function modifyName(name) {
this.name = name;
}
modifyName('fengyun');
console.log(name);

Read More