zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Linux下Subversion的使用
    python3之HTML、CSS学习
    Python成长之路 常用模块与正则表达式
    Css3 列表布局 两列或者多列布局整理
    .net 通过代码控制GridView显示列
    .net 创建一个页面级全局datatable的方法
    .net 将分页展示的GridView的全部数据 导出excel
    .net 如何判断dataset是否为空
    sql 全表结构备份
    sql 把一个表中的某一列赋值到另一个表中的某一列
  • 原文地址:https://www.cnblogs.com/tig666666/p/6021922.html
Copyright © 2011-2022 走看看