Js面向对象和数据类型内存分配(转)
一 Js基本数据类型以及内存情况
1 Undefined
Undefined类型只有一个值undefined,在使用了声明但未初始化的变量的时候,这个变量值就是undefined
1 var hi;
2 alert(hi);//undefined
2 Null
Null类型也只有一个值null,可以把null理解为一个空指针。
3 Boolean
Boolean只有两个字面值true和false。
4 Number
就是其他语言里的整数和浮点数。
5 String
就是字符序列,可以用单引号或双引号表示
1 var a =’hi’;
2 var b = “hi”;
以上5种类型在内存中占有固定大小的空间,它们的值保存在栈内存中。
6 Object
Object类型是其他所有实例的基础。
对于引用类型的值,是在堆内存中分配空间。但由于内存地址大小是固定的,因此内存地址保存在栈内存中,所以查询的时候先从栈内存中取到地址,然后在通过地址找到堆内存中的实际值。
二 变量的复制
基本类型:会在栈上创建一个新的值,然后把该值复制到新变量的位置上。
1 var a = 1;
2 var b = a;
a和b都是1,操作不会相互影响
引用类型:会将对象复制一份到新分配的变量中,但复制的是指针,而这个指针指向堆中的同一个对象。
1 var a = new object();
2 var b = a;
3 a.name = “hi”;
4 alert(b.name);
三 作用域链
1 function内定义的变量是局部变量,是作用域链的里层。作用域链是由内向外查找的,找到则停止搜索
2 没有自己的块级作用域(指的是由花括号封闭的代码块),如if for语句
3 不加关键字var 声明的变量是全局变量,当使用var关键字声明变量时,这个变量将被添加到最近的作用域中。
四 面向对象
Javascript中没有类的概念,所以创建对象的方式和其他语言也有很大区别。
1. 简单对象创建
1 //创建对象
2 var cat = new Object();
3 //属性
4 cat.name = "tom";
5 cat.sex = "boy";
6 cat.age = 16;
7 //方法
8 cat.sayName = function() {
9 alert(this.name);
10 }
11 cat.sayName();
2. 构造函数模式
1 function Cat(name, sex, age) {
2 this.name = name
3 this.sex = sex
4 this.age = age
5 this.sayName = function() {
6 alert(this.name);
7 }
8 }
9
10 var cat = new Cat("tom", "boy", 16);
11 cat.sayName();
3. 结合构造函数和原型模式
prototype属性
通俗的理解是它可以让所有对象的实例共享它所包含的属性和方法。
构造函数用于定义实例属性,原型模式用于定义共享属性和方法。
1 function Cat(name, sex, age) {
2 //定义实例属性
3 this.name = name;
4 this.sex = sex;
5 this.age = age;
6 }
7
8 Cat.prototype = {
9 //共享属性和方法
10 canCatchMouse:true,
11 sayName: function() {
12 alert(this.name);
13 }
14 }
15
16 var whiteCat = new Cat("tom", "boy", 16);
17 var blackCat = new Cat("lily", "girl", 13);
18
19 alert(whiteCat.name == blackCat.name);//false
20 alert(whiteCat.canCatchMouse == blackCat.canCatchMouse);//true
原文:http://www.cnblogs.com/xqhppt/archive/2011/07/09/2101812.html
Js面向对象和数据类型内存分配(转)的更多相关文章
- Java基本数据类型内存分配
1.java程序运行时有6中地方存储数据,分别是:寄存器.栈.堆.静态存储.常量存储.非RAM(随机存储器),主要是堆与栈的存储. 2.堆与栈是java用来在RAM中存储数据的地方,java自动管 ...
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- JavaSE基础知识(5)—面向对象(5.1类和对象概念、创建及内存分配)
一.类和对象的相关概念 1.面向对象和面向过程的理解 面向对象和面向过程都属于解决问题的思考方式.面向过程:以执行者的角度思考问题,侧重于“怎么做”,比较适合解决小型项目面向对象:以指挥者的角度思考问 ...
- 转:c++内存分配
第一篇: http://my.oschina.net/pollybl1255/blog/140323 BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS ...
- <转载>内存管理内幕-动态分配的选择、折衷和实现 对malloc内存分配有个简单的描述,对内存管理有个大致的说明
这篇文章看后感觉不错,和我在glibc下的hurdmalloc.c文件里关于malloc的实现基本意思相同,同时,这篇文章还介绍了一些内存管理方面的知识,值得推荐. 原文链接地址为:http://ww ...
- 终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good
这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ------------------------------------------------- ...
- JVM学习之内存分配一
转自:http://blog.csdn.net/mazhimazh/article/details/16879055,多谢博主分享 我们知道计算机的基本构成是:运算器.控制器.存储器.输入和输出设备, ...
- JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和mu ...
- Java静态内存与动态内存分配的解析
1. 静态内存 静态内存是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源. 程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用 ...
随机推荐
- linux的HugePage与oracle amm关系
如果Oracle 是11g以后的版本,那么默认创建的实例会使用Automatic Memory Management (AMM)的特性,该特性与HugePage不兼容. 在设置HugePage之前需 ...
- codeforces 334B - Eight Point Sets
题意难懂,其实就是x1<x2<x3与y1<y2<y3两两组合成九个点,去掉(x2,y2),剩余八个.这样的八个点才是满足要求的. 忘去重了 #include<cstdio ...
- 【周期串】NYOJ-1121 周期串
[题目链接:NYOJ-1121] 例如:abcabcabc 该字符串的长度为9,那么周期串的长度len只可能为{1,3,9},否则就不可能构成周期串. 接下来,就是要在各周期间进行比较.描述不清... ...
- android中sqlite3常用命令
1)打开数据库 在adb shell模式下执行命令sqlite3 + 数据库名称,例如打开email中的EmailProvider.db数据库: 2)sqlite3特殊命令 大多数候,sqlite3读 ...
- Long Dominoes(ZOJ 2563状压dp)
题意:n*m方格用1*3的方格填充(不能重叠)求有多少种填充方法 分析:先想状态,但想来想去就是觉得不能覆盖所有情况,隔了一天,看看题解,原来要用三进制 0 表示横着放或竖放的最后一行,1表示竖放的中 ...
- php 解决微信昵称emoji表情插入MySQL报错
在PHP接受到微信用户昵称入库的时候报错 原因:utf-8 最大3个字节,而emoji占4个字节 解决办法: 1.修改mysql 数据库的字符集,改为utf8mb4,但是前提是MySQL的版本需要5. ...
- UML统一建模语言
概述 统一建模语言(UML)是一种图形化的语言,用于软件密集系统要素的可视化.制定规范.构建对象和编写文档.UML提供了一种标准的方式来描述系统的设计图,既包括概念方面,例如业务过程和系统功能,也包括 ...
- ACM2050
问题描述: 平面上有n条折线,问这些折线最多能将平面分割成多少块? 样例输入 1 2 样例输出 2 7 答案是: 2n ( 2n + 1 ) / 2 + 1 - 2n = 2 n^2 – n + ...
- MUSIC算法学习笔记
MUSIC即多重信号分类. MUSIC算法仅能估计非相干关信源,对相干信源,其性能将随信源间的相 关系数的增加而逐渐降低,直至完全恶化. 阵列信号处理的只要问题包括:波束形成技术,零点形成技术,空间谱 ...
- 【hadoop代码笔记】Mapreduce shuffle过程之Map输出过程
一.概要描述 shuffle是MapReduce的一个核心过程,因此没有在前面的MapReduce作业提交的过程中描述,而是单独拿出来比较详细的描述. 根据官方的流程图示如下: 本篇文章中只是想尝试从 ...