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

JavaScript原型,原型链 ? Js的继承?

时间:2015-10-21 01:44:01      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

什么是js原型:函数的一个属性,在函数的创建过程中由js编译器自动添加。具体来说,就是我们经常使用的,prototype属性,这个属性怎么得来的呢?
当生产一个function对象的时候,就可以看到它了。
技术分享
js functiion对象的创建-1
要使用function对象,必须先创建一个对象,有几种方式:
1、var A = function(){};//字面量,匿名函数,推荐
2、function A(){};//函数声明
3、var A = new Function(//这里是函数体)//实例化函数对象
 
那么,我们来看第一种方式做了什么
分解动作:
1、x = new Object();//开辟一块内存,然后创造一个对象
2、x.constructor = A;//将x的构造函数指向A的函数实体
3、A.prototype = x;//A的原型指向新开辟的对象
技术分享
技术分享
js function对象的创建-2
技术分享
几点说明:
1、每创建一个function的对象,会自动为其增加一个“name”的属性,采用方法1,name= undefined,方法二才会有值。
2、_proto_属性是隐性属性,除了FF以外,没有方法调用到。
3、每次new一个function其实消耗的空间是如上图所示的,其实创建的是两个对象。
 
js 里面的构造函数
只要是个函数,他就可以使构造函数,他具有函数的功能,也能够返回值,不过这里要特别注意,如果构造函数返回基本类型的值,这个值会被忽略,如果
构造函数返回一个对象,OK,你悲剧了,如下图
技术分享
实例属性和静态属性(原型方法)、类属性-1
这几个概念在js里面并不是很明晰,在强类型语言里面,多使用static来做标识。
我们来看以下代码:
var A  = function(){//this is a class
this.instanceProp = 1;//this is a instance,chrome will no show when undefined 
this.instanceFunction = function(){};//this is a instance function
}
A.prototype.staticFn = function(){}//this is a static function
A.classFn = function(){}//this is a class function
var a = new A();
实例属性和静态属性(原型方法)、类属性-2
分解动作
//实例化A类,此时,第一步,将构建一个空的object
//第三步将执行构造函数,将实例化方法返回到当前实例上,也就是A.apply(a,[args]);
 
//也就是说,var a  = new A();分解为:
var a = new Object();
a._pro_=A.prototype;
A.call(a);
a._proto_.constructor = A;
实例属性和静态属性(原型方法)、类属性-3
上面一步的内存结构为,大家注意消化下内存中的引用关系
技术分享
原型(链)继承
那么当我们使用原型链继承的时候发生了什么?
一般我们的原型链继承,我们这么写:
var B =function(){
this.bslnsProp = "xx";
};
B.prototype = new A();
直接看内存模型吧
技术分享
 

JavaScript原型,原型链 ? Js的继承?

标签:

原文地址:http://www.cnblogs.com/Yirannnnnn/p/4896542.html

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