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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值