码迷,mamicode.com
首页 > 编程语言 > 详细

阅读javaScript 的原型笔记

时间:2015-07-20 19:16:35      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

下面我们先看一个例子已经一张图。

function Foo() {
}
Object.prototype.name = ‘My Object‘;
Foo.prototype.name = ‘Bar‘;
var obj = new Object();
var foo = new Foo();
console.log(obj.name); // 输出 My Object
console.log(foo.name); // 输出 Bar
console.log(foo.__proto__.name); // 输出 Bar
console.log(foo.__proto__.__proto__.name); // 输出 My Object
console.log(foo. __proto__.constructor.prototype.name); // 输出 Bar

技术分享

 

通过对上面原型例子的阅读与思考,我们可以得出以下结论:

1.通过new关键字创建的对象没有prototype属性,只有_proto_属性。
2.通过new出来的对象其_proto_属性指向被new对象.prototype
3.构造函数有_proto_与prototype属性。
4.构造函数的prototype属性指向构造函数.prototype  反过来构造函数.prototype.constructor指向该构造函数。(看图)
5.只要是构造函数,构造函数._proto_都指向Function.prototype
6.Function与Object他们都是构造函数。
7.Object.prototype是所有对象的祖先,Function.prototype 是所有函数的原

型,包括构造函数。 

以上每个结论都是自己参考文章并概括的,也可能会存在理解上的偏差,总之本人自己感觉这样可以让自己能够大致理解原型大致是一个什么概念以及对象间的原型关系。

 

补充1:

?构造函数内定义的属性继承方式与原型不同,子对象需要显式调用父对象才能继承构
造函数内定义的属性。
? 构造函数内定义的任何属性,包括函数在内都会被重复创建,同一个构造函数产生的
两个对象不共享实例。
? 构造函数内定义的函数有运行时闭包的开销,因为构造函数内的局部变量对其中定义
的函数来说也是可见的。

补充2:

? 除非必须用构造函数闭包,否则尽量用原型定义成员函数,因为这样可以减少开销。
? 尽量在构造函数内定义一般成员,尤其是对象或数组,因为用原型定义的成员是多个
实例共享的。

 

注:参考文章

node.js开发指南

 

阅读javaScript 的原型笔记

标签:

原文地址:http://www.cnblogs.com/ruoqiang/p/4662063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!