JavaScript 原型总结三 函数和对象的关系

1.既typeof以后的另外一位老朋友!

在我们的上一节(JavaScript 原型总结二 一切皆对象之typeof)中说道,函数也是一种对象。他也是属性的集合,你也能够对函数进行自定义属性。javascript

不用等我们去试验,javascript本身就先作了表率,人家就默认的给函数一个属性——prototype。对,每一个函数都有一个属性叫作prototype。java

这个prototype的属性值是一个对象(属性的集合,再次强调!),默认的只有一个叫作constructor的属性,指向这个函数自己。微信

如上图,SuperType是是一个函数,右侧的方框就是它的原型。函数

原型既然做为对象,属性的集合,不可能就只弄个constructor来玩玩,确定能够自定义的增长许多属性。例如这位Object大哥,人家的prototype里面,就有好几个其余属性。spa

function Fn() { }
        Fn.prototype.name = '张泽立';
        Fn.prototype.getYear = function () {
            return 0;
        };

        var fn = new Fn();
        console.log(fn.name);
        console.log(fn.getYear());
//即,Fn是一个函数,fn对象是从Fn函数new出来的,这样fn对象就能够调用Fn.prototype中的属性。
//由于每一个对象都有一个隐藏的属性——“__proto__”,这个属性引用了建立这个对象的函数的prototype。
//即:fn.__proto__ === Fn.prototype

说到底:对象是由函数建立的.JavaScript的继承离不开prototype.这也是问什么函数的typeof为何是Function类型了,原则上就是造成了一个原型环链,可能这里讲的不叫抽象,这是必要要注意对象的"_proto_".net

这里的"__proto__"成为“隐式原型”,下一节<JavaScript 原型总结四 隐式原型>。另外本人的订阅号和微信prototype

相关文章
相关标签/搜索