深入理解javascript中的原型和闭包之一

通过几个结论来梳理今天的文章

一、一切都是对象

javascript中存在值类型(undefined, number, string, boolean)和引用类型函数、数组、对象、null、new Number(10)两种,引用类型的都是对象。tyoeof [1,2,3]  //object。引用类型的类型判断,用instanceof。

对象是若干属性的集合,javascript中的对象可以任意的扩展属性。

二、对象都是函数创建的

function Fn() {
    this.name = 'aaa';
    this.year = 2010;
}
var fn1 = new Fn();

这种方法是在用函数创建对象

var obj = { a: 10, b: 20 };

这种方法其实是一种语法糖,

var obj = new Object();
obj.a = 10;
obj.b = 20;
    

同样是在用函数创建对象。对象都是通过函数创建的。

三、每个函数都有一个prototype属性,属性的值是一个对象,默认只有一个constructor指向函数本身

function Fn() { }
    Fn.prototype.name = '小名';
    Fn.prototype.getYear = function () {
    return 1988;
};

var fn = new Fn();
console.log(fn.name);
console.log(fn.getYear());

这一项应该简单理解,fn->prototype->{constructor:fn}。其实就是一个链状结构。

四、每个对象都有一个__proto__属性,隐式原型

var obj={};

obj.__proto__=== Object.prototype

每个对象都有一个__proto__属性,指向创建该对象的函数的prototype

随机浏览