美文网首页
笔记(一)——基本介绍之深拷贝与浅拷贝

笔记(一)——基本介绍之深拷贝与浅拷贝

作者: believedream | 来源:发表于2017-02-19 23:20 被阅读0次

1.面向对象的基本概念

1.1 是不是一个面向对象的语言

不是:与传统的面向对象的理论有矛盾。(C# ,java)

是:js 里面到处都是对象。 数组 时间 正则 ...

给出一个折中的说法

js是一个基于对象的多范式编程

多范式:是指编程风格

1.面向过程的方式编程

2.面向对象的方式编程

3.函数式编程...

** -> 函数式编程的一个特点:递归与链式**

jQuery 就是典型的链式编程风格

比如:给div标签添加样式


$('div').css('border','1px solid red');

1.2面向对象的概念

概念:要做什么就找到对应的对象,告诉他做什么,然后等待结果。
面向对象是面向过程的封装。

1.3万物皆对象

在实际开发中,对象是一个抽象的概念,可以将其简单的理解为:数据集或者功能集、

—>数据集:很多数据打包到一起。{name:'张三',age:19,gender:'男'}

假设展示10条商品数据:每个商品:名字,描述,价格,图片

—>每一条数据可以变成一个对象:{name:'',desc:'',price:0,img:''}

—> 引入数组,将数据存储到数组中。

—>功能集:

1.4 面向对象的特性

1.抽象性(抽取一些我们需要的属性和方法)

2.封装性

3.继承性

4.多态性(在js中,不需要多态性)

2.js的数据类型

2.1分类:

1.基本数据类型(值类型):number string ,boolean

2.复合数据类型(引用数据类型):时间,数组,正则

3.空类型

基本数据类型的存储模型 就是一个方格里面放一个数据

复合数据类型的存储模型 是一个单独的内存的区域,对象有什么
属性,那么内存区域中就有什么属性。变量只存储对象的'地址',所以
它不是真正存储数据的区域。

注意: 复合类型除了funcion以外,无法通过typeof 获取
到数据类型。需要通过Object.prototype.toString.apply()
获取到它是什么数据类型。

2.2值类型和引用类型的存储特征

-->值类型的数据,只需要开辟一段内存存储数据即可。

-->对象类型(引用类型), 对象才是真正的数据,需要占据单独的内存。
而变量名只是存储着对象的内存地址(引用)。

2.3值类型与引用类型的赋值与传参的特点

--> 赋值:将原变量中的数据拷贝一份,然后存储到给定变量中

值类型:拷贝的数据与原来没有关系,改变一个变量,另一个变量不会随着改变。

引用类型:由于引用类型存储的是地址,因此改变一个值,另一个值也会改变。且值与
与改变的相同。

2.4函数参数传递

函数要调用时,需要传参数。

在调用函数时,形参会先复制一份实参。

3. 深拷贝与浅拷贝

3.1什么是拷贝

就是创建一个与目标数据一模一样的数据

3.2拷贝

var p={
    name:'张三',
    age:19.
    gender:'男',
    clone:function(){
        var temp={};
        temp.name=this.name;
        temp.age=this.age;
        temp.gender=this.gender;
        temp.clone=this.clone;
        return temp
    }   
    var p2=p.clone();
}

3.2 深拷贝与浅拷贝

//浅拷贝案例
var car={name:'保时捷'};
var person={
    name:'张三',
    age:19.
    gender:'男',
    clone:function(){
        var temp={};
        temp.name=this.name;
        temp.age=this.age;
        temp.gender=this.gender;
        temp.clone=this.clone;
        return temp
    }   
    var p1=person.clone();
    var p2=person.clone();
    //p1中的car与p2中的car是同一个对象,这属于浅拷贝
    
    
    
    //深拷贝
    function deepCopy(p, c) {
    var c = c || {};
    for (var i in p) {
      if (typeof p[i] === 'object') {
        c[i] = (p[i].constructor === Array) ? [] : {};
        deepCopy(p[i], c[i]);
      } else {
         c[i] = p[i];
      }
    }
    return c;
  }
}

如果对象的属性也是引用类型,拷贝的时候不重新创建一个新的
对象来实现该属性的拷贝,那么就是浅拷贝。既是浅拷贝。

讲两个对象完全从内存中隔离开,就是深拷贝,既每一个引用
属性,以及引用属性的引用,全部拷贝出来,就是深拷贝。

4.构造函数(构造器 controctor)作用

—>4.1js中对象的动态特性

即 想要什么属性就可以提供什么属性
在js 中 对象如果没有指定的属性,只需要利用赋值就可以
给对象提供属性。

—>点语法与关联数组的语法

o.name='jim'; //点语法赋值
o['name']='tom';关联数组语法赋值

问题:
    //name是一个变量,里面存储的是字符串,也是可以的
    o[name]='jack';

4.2使用工厂方法创建函数

function createPerson( name, age, gender ) {
            var p = {};
            p.name = name;
            p.age = age;
            p.gender = gender;
            return p;
        }

        var p1 = createPerson( 'jim', 19, '男' );
        var p2 = createPerson( 'lily', 18, '女' );

        这个( 这种类型 )的函数就是用来创建对象的, 即生产对象. 常常将这类函数
        称为 '工厂函数'

4.3构造函数常见函数

function Person( name, age, gender ) {
            this.name = name;
            this.age = age;
            this.gender = gender;
        }
        // 调用构造器创建对象
    var p = new Person( '李磊', 19, '男' ); 

相关文章

  • 笔记(一)——基本介绍之深拷贝与浅拷贝

    1.面向对象的基本概念 1.1 是不是一个面向对象的语言 不是:与传统的面向对象的理论有矛盾。(C# ,java)...

  • Objective-C中的浅拷贝和深拷贝

    Objective-C中的浅拷贝和深拷贝IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解iOS ...

  • python(进阶一)

    三范式 GIL 深拷贝与浅拷贝 深拷贝 浅拷贝 跟引用的区别 python基本上如果提供了copy方法都是浅cop...

  • 简述三范式,GIL,浅拷贝与深拷贝

    三范式 GIL 深拷贝与浅拷贝 深拷贝 浅拷贝 跟引用的区别 python基本上如果提供了copy方法都是浅cop...

  • 深拷贝 浅拷贝

    深入认识深拷贝 浅拷贝 公共方法 // 深拷贝 浅拷贝 对于基本类型来说 对于赋值操作 就是 深拷贝 因为值...

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • 认识js下的浅拷贝与深拷贝

    浅拷贝与深拷贝 首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只拷贝一...

  • Java基础 - 深拷贝和浅拷贝

    Java 的深拷贝和浅拷贝 什么是深拷贝、浅拷贝 (深克隆、浅克隆)? 在 Java 中,数据类型分为 基本数据类...

  • js浅拷贝、深拷贝

    前言 本文主要简单讲一下什么是浅拷贝、什么是深拷贝、深拷贝与浅拷贝的区别,以及怎么进行深拷贝和怎么进行浅拷贝。 一...

  • Java的浅拷贝与深拷贝

    Java的浅拷贝与深拷贝 一、概念 浅拷贝浅拷贝仅仅复制所考虑的对象(包括对象中的基本变量),而不复制它所引用的对...

网友评论

      本文标题:笔记(一)——基本介绍之深拷贝与浅拷贝

      本文链接:https://www.haomeiwen.com/subject/nwhswttx.html