首页 > 其他 > 详细

程序世界里的对象

时间:2015-11-22 23:11:13      阅读:238      评论:0      收藏:0      [点我收藏+]

  在程序世界里,对象都是没有思维性的对象(什么是没有思维性对象,请看一切都是对象这篇文章),也就是对象本身不能去控制改变自己的或者别的对象,要由程序员写代码来控制.
  程序员最常见的分类是:抽象对象和实例对象,一般称抽象对象为类,实例对象简称为实例,但我想在引申一些新的概念(新概念是为了更好的解析我的想法),在我的意识里,一切都是对象,所以包括符号,比如:=,{},[],运算符,关键字这些,都是对象,只要在程序代码中出现的都是对象.我把程序里的对象分为三种:第一种是标识对象,第二种是数据对象,第三种是意义对象
好,现在我以javascript语言举例说明:
来个最简单的例子:


var a = {};


  这个例子就包括了三种对象,标识对象为a,数据对象为{},意义对象有:var,=,;这三个,我从对象的时空性来分别说明:
  首先说数据对象,数据对象有数据类型,在javascript中有6种数据类型,分别是number,boolean,string,undefined,object,function型
其中number,boolean,string,undefined是值类型,object和function是引用类型,这两种类型的存在空间是不一样的,我把内存分为两种存储空间分为两种.一种是程序运行内存(小房间),另一种是数据内存(大房间),为什么这样划分?请看我的另一文章:我的编程概念,这里有举了个例子说明.其中object和function这两种引用类型的数据对象,都是存储在数据内存中的,所以在内存中就有存储地址和数据两项.在刚才的例子当中{}是引用类型数据对象,所以是存储在数据内存中的.因为数据对象存储在内存中,其存储地址我们一般情况下是不知道的,程序员是没法直接控制这个数据对象的,但我们又要用到这个数据对象,所以就需要一个标识对象来引用数据对象,比如例子当中的a,当我们需要用到数据对象时,就用其对应的标识对象,所以标识对象是为了给我们程序员控制数据对象来使用的
  标识对象也有两项属性,一是标识符,二是数值.如果标识的数据对象是引用类型,而标识对象的数值是数据对象的内存地址,这样就可以关联到
内存中的数据对象.如果标识的数据对象是值类型,那么标识对象的数据就是这个数据对象.这个存储工作是由意义对象=来完成的.

那么什么是意义对象呢?就是var,=,; 这些是由执行环境定义和创建的,并且执行环境自己解析,其各有不同的意义.比如var 就表示要创建一个标识对象,而=就是赋值操作,把标识对象和数据对象关联起来.么我们常说的类,实例都是数据对象,都是存储在数据内存中,而标识对象一般指的就是我们常说的变量(在javascript中变量是没有类型的).

数据对象和标识对象是由程序员定义,执行环境根据定义进行创建,并且存储在相应的内存空间中.程序员通过标识对象来控制数据对象. 标识对象的生命周期是跟其所在的函数有关,当函数执行完,此标识对象一般情况下就会被清理(也有可能不被清理,对于其生命周期会有更详尽的解析),而存储在数据内存中数据对象除了声明创建时在函数内部,但创建之后就不跟函数再有关系.

再举一个例子吧:


var a = 3;
var b = {name:"b"};
var c = function(){};
a=b;
b=c;
c=a;
b=c;
console.log(a);
console.log(b);
console.log(c);


此例当中分别声明和创建了三个标识对象a,b,c,三个数据对象:3,{name:"b"},function(){}
前3句通过意义对象=建立的关系: 因为3是值类型,所以3直接存在a的数据中.而b ,c 存是分别是{name:"b"},function(){}的内存地址
在第4句a=b;此时把b的数据赋给了a,也就是说a也存着{name:"b"}的地址,那原来的3就被取代了..
在第5句b=c;此时把c的数据赋给了b,也就是说b存着function(){}的地址.
在第6句c=a;此时把a的数据赋给了c,也就是说c存着{name:"b"}的地址.
在第7句b=c;此时把c的数据赋给了b,也就是说b存着{name:"b"}的地址.
那么现在a,b,c都指向了{name:"b"},那么输出内容都是{name:"b"},而function(){}没有标识符进行关联,将交由垃圾处理器处理

程序世界里的对象

原文:http://www.cnblogs.com/elpmis-wu/p/4986910.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!