arr=[1,3,5]
arr.toString-->"1,3,5"
var a={name:"abc"};
a.toString-->[object,object];
构造函数和普通函数
构造函数:
function Student(){}
引用var p=new Student();
执行步骤
1.先创建一个对象o
2.给对象赋值(this),执行各种操作 this.a="" 
3.返回这个对象o
区别
1.函数内部会创建一个对象
2.函数内部this指向新创建的对象
3.默认返回值就是创建的对象
普通函数:
function person(){};
引用person();也可以用new person();
执行步骤
进入函数依次执行步骤
区别
1.函数内部不会创建对象
2.函数内部this指向调用函数的对象,谁调用指向谁,没有对象调用时,指向window
3.返回值由ruturn语句决定
任何函数都有prototype属性,指向它的原型
在浏览器中,几乎所有对象都有__proto__属性,原型链顶端没有
__proto__是非标准属性,不可以出现在开发中
函数的继承:
	a、扩展原型对象
function Person(){
 }
    Person.prototype.say=function(){};
    var p1=new Person();
    p1.say();
p1继承了p1.__proto__对象
p1.__proto__继承了p1.__proto__.__proto__对象
...
	b、替换原型对象
在原型对象加方法,通常加constructor,这样就替换了默认的prototype
	c、混入继承
function extend(target,source){//mixin
    for (var key in source) {
        var value=source[key];
        //设置目标对象的同名属性的值
        target[key]=value;
    }
    return target;
}
	d、原型+混入继承
function Student(){
 }
    extend(Student.prototype,{
        a:function(){},
        b:function(){},
        c:function(){}
    });
    var s1=new Student();
    console.log(s1.a());
	e、经典继承——>Object.create()
原文:http://www.cnblogs.com/sw1990/p/5898454.html