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--对象的特性的主要内容,如果未能解决你的问题,请参考以下文章

常用Javascript代码片段集锦

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

JavaScript单行代码,也就是代码片段

译ECMAScript 2016, 2017, 2018 新特性之必读篇

js代码片段