您的位置:首页 > Web前端 > JavaScript

JS面向对象特性和值类型与复合类型

2016-08-21 14:24 399 查看

JS面向对象之特性已经值类型与复合类型

一些属性

空对象

空对象也是对象, 只是有存变量的变量名, 没有对象属性

var o ={};


参数传递

值类型: 函数内外两个变量, 两个数据, 都不相同

引用类型: 函数内外变量不同, 一个数据, 相同地址

赋值

var num =123;


var num2 = num;


值类型的赋值特点

将变量内的数据全部拷贝一份, 赋值的变量

var num = 123
表示变量中存储中的数字是 123

将 123 数据拷贝一份, 内存中有 2 个数据

将拷贝数据复制
num2


特点是在内存中有2个数据副本

引用(复合)类型赋值

var o ={ name :'张三'};


var obj = o;


引用类型赋值就是将变量 o 中存储的数据拷贝一份( 地址 ), 然后将数据赋值给obj

内存中只有1份数据

特点是两个变量,一个数据,指向同一个地址

深拷贝与浅拷贝( 保证对象的属性也是引用类型 )

深拷贝的概念

拷贝的时候, 将数据中的所有引用类型的值, 全部拷贝一份, 数据在内存中独立, 就是深拷贝

修改拷贝数据和源数据, 没有联系

特点: 内存隔离,完全独立

浅拷贝的概念

拷贝的时候, 只针对当前对象的属性进行拷贝, 而引用类型不考虑

对象的动态特性

在 js 中, 一个对象需要属性, 就可以利用
对象.属性名 = 值
的方式, 为这个对象添加成员, 只要赋值成功, 对象就增加了新的属性

想要添加方法, 就添加方法

想要添加属性, 就添加属性

想要移除属性或方法, 使用
delete


对象属性的访问形式

点语法:
o.name


关联数组:
o[name]


混入方法( extend )

function extend(o1, o2){


for(var key in o2){


o1[key]= o2[key];


}


}


如果需要给对象动态添加成员, 必须使用关联数组语法

var o ={


name :'张三',


sayHello :function(){


console.log('Hello, 我叫'+this.name );


}


}




console.log( o.name );// 访问的是 o 的name 属性


console.log( o['name']);


o.sayHello();


o['sayHello'];// []中的是字符串


参数传递

作为函数中的参数, 就是将参数的数据复制一份, 传递给函数的形参

function foo(num){}


var a =123;


foo(a);


* 函数在调用的时候, 首先需要将参数中的数据复制一份, 数字 123 复制一份
* 跳转到函数中, 完成形参赋值, num = 123;
* 进入函数体, 执行每一句函数


值类型作为函数参数传递的特征, 函数内与函数外是两个不同的变量, 只是值相等

引用类型作为函数参数传递的特征, 函数内与函数外是两个不同的变量, 但是是指向相同得自, 指向同一个对象

函数内部允许修改函数外部的对象的数据

构造函数

构造函数的作用

new 的作用, 初始化数据

在 js 给对象添加属性时, 使用对象的动态特性结合this(这里this指的是使用构造函数创建的实例对象), 来进行赋值, 添加成员

构造函数创建对象的过程

代码:
var 五类= new Person();


使用 new 创建一个对象, 它类似于
o = {}
, 是一个没有任何成员的空对象

使用 new 创建对象, 对象的类型就是创建他的构造函数名

使用 {} 创建对象, 相当于使用
new Object
, 他的类型都是 Object

调用构造函数, 创建实例对象, 初始化成员

构造函数在调用的一开始, 有一个赋值操作, this指向刚刚创造错来的实例对象(引用地址)

隐藏在构造函数中this表示刚刚创建出来的对象

在构造函数中使用this结合对象的动态特性, 为实例对象添加成员



来自为知笔记(Wiz)



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: