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)  //trueconsole.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.

时间: 2024-10-12 14:21:32

javascript--对象的特性的相关文章

(转)深入理解JavaScript的闭包特性 如何给循环中的对象添加事件

深入理解JavaScript的闭包特性如何给循环中的对象添加事件 初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript的闭包特性. 有个网友问了个问题,如下的html,为什么点击所有的段落p输出都是5,而不是alert出对应的0,1,2,3,4. 1.  <!DOCTYPE HTML> 2.  <html> 3.  <head&g

深入理解JavaScript的闭包特性如何给循环中的对象添加事件

初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript的闭包特性. 有个网友问了个问题,如下的html,为什么点击所有的段落p输出都是5,而不是alert出对应的0,1,2,3,4. 1.  <!DOCTYPE HTML> 2.  <html> 3.  <head> 4.  <meta charset="utf

深入理解JavaScript的闭包特性 如何给循环中的对象添加事件

初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript的闭包特性. 有个网友问了个问题,如下的html,为什么点击所有的段落p输出都是5,而不是alert出对应的0,1,2,3,4. <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" /> &

JavaScript对象浅谈

JavaScript对象 对象 ECMA-262 把对象(object)定义为"属性的无序集合,每个属性存放一个原始值.对象或函数".严格来说,这意味着对象是无特定顺序的值的数组. 对象是属性和方法的无序集合 对象就是无序属性的集合 尽管 ECMAScript 如此定义对象,但它更通用的定义是基于代码的名词(人.地点或事物)的表示. 在JavaScript中,除了数字.字符串.布尔值.null.undefined这五种原始类型,之外的都是对象,也就是印证了"万物皆对象&quo

Ext JS学习第十天 Ext基础之 扩展原生的javascript对象(二)

此文来记录学习笔记: 今天继续说Ext.Array,Ext.Function,Ext.Date,Ext.Error ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Ext.Ar

用Java来比较JavaScript的一些特性

由于是从java做到JavaScript,所以对强弱语言类型,还是比较敏感的.JavaScript是弱语言,只严格区分数据和指令.简单描述下自己对两者之间的一些区别吧. 1.JavaScript变量的类型取决于右侧的对象. JavaScript: var variable_name = new Object(); Java: Object variable_name = new Object(); 2.JavaScript没有块级作用域, Java: if(true) { Object a =

利用js对象的特性,去掉数组中的重复项

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Unt

深入学习JavaScript对象

JavaScript中,除了五种原始类型(即数字,字符串,布尔值,null,undefined)之外的都是对象了,所以,不把对象学明白怎么继续往下学习呢? 一.概述 对象是一种复合值,它将很多值(原始值或其他对象)聚合在一起,可通过属性名访问这些值.而属性名可以是包含空字符串在内的任意字符串.JavaScript对象也可以称作一种数据结构,正如我们经常听说的“散列(hash)”.“散列表(hashtable)”.“字典(dictionary)”.“关联数组(associative array)”

javascript对象的属性,方法,prototype作用范围分析

读了篇博客感觉很有用"javascript对象的属性,方法,prototype作用范围分析"就自己写了一遍.以后自己可以用的到. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://

JavaScript 对象深入学习总结

JavaScript 对象深入学习总结(1) http://developer.51cto.com/art/201509/492640.htm 2015-09-29 09:27 clearbug 字号:T | T JavaScript中,除了五种原始类型(即数字,字符串,布尔值,null,undefined)之外的都是对象了,所以,不把对象学明白怎么继续往下学习呢? AD: JavaScript中,除了五种原始类型(即数字,字符串,布尔值,null,undefined)之外的都是对象了,所以,不