javascript--对象的特性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript--对象的特性相关的知识,希望对你有一定的参考价值。
对象具有三大特性:封装,继承,多态
一、封装
1.函数的封装是为了函数的安全性,将对象进行包装,通过有限的接口衍化不同的对象
2.工厂函数封装
工厂函数是设计模型中的一种说法,不是通过类实例化构造函数,而是通过函数进行构造对象,在函数内部创建一个对象,通过参数的传递实现对象的更多控制,并将对象返回,当属性相同时造成内存的浪费。
// (函数里创建一个对象,对象的属性值由自己传入,) function person(name,age,say){ var obj ={}; obj.name=name; obj.age=age; obj.say=say; //回调 return obj; } function say1 (){ alert(‘说话‘) } function say2 (){ alert(‘笑‘) } var ls =person(‘ls‘,16,say2); //(不需构造函数,接收的返回值本身就是对象) var zs =person(‘zhangsan‘,18,say1); // (zs变为对象,接收工厂函数的返回值)
3.构造函数封装
function person(name,age){ this.name=name; this.age=age; } person.prototype.say=function(){ alert("说话") } var zs=new person("zs",12); var ls=new person("ls",15); zs.say(); ls.say();
console.log(ls instanceof Object) //true
console.log(ls instanceof person) //true
//公用代码段放在prototype原型中存储,其属性是固定的,不可改变
4.构造函数与工厂函数的异同
1)工厂函数需要创建对象,并且必须有返回值
2)工厂函数针对的是Object的对象模型,而构造函数可以匹配自定义的对象模型
3)工厂函数只能在局部添加新的属性和方法,构造函数可重写,在全局中添加新属性和方法
4)构造函数在全局中定义相同的局部变量,容易造成全局污染,this.xx在局部中获取不到,就会去全局中获取。
二、继承(实现代码的重复使用)
1.继承的原理:拷贝
1)深拷贝:拷贝对象的值
2)浅拷贝:拷贝对象的地址,影响源对象的属性值
var json={name:"zhangsan",age:12,son:{name:"lisi"}} var json1=copy(json) //浅拷贝 function copy(json){ var newobj={} for(var i in json){ newobj[i]=json[i] } return newobj; } json1.son.name="lisi1" console.log(json.son.name) //lisi1 //深拷贝 function copy(json){ var newobj={}; for(var i in json){ if(typeof json[i]=="object"){ newobj[i]=copy(json[i]) }else{ newobj[i]=json[i] } } return newobj } json1.son.name="lisi1" console.log(json.son.name) //lisi
2.
以上是关于javascript--对象的特性的主要内容,如果未能解决你的问题,请参考以下文章