JavaScript之对象

作者: 追逐_chase | 来源:发表于2018-03-16 10:59 被阅读0次
timg.jpg
JavaScript中的对象和OC中的字典 Dictionary是一样的,一组“键值对”(key-value)的集合,并且是一种无序的复合数据集合。
  • 注意:JavaScript不是面向对象的语言,但是可以模拟面向对象的思想, 它是一门基于对象的语言。

对象的创建

1.调用系统的构造函数创建对象
* var 变量名= new Object(); Object 是系统的构造函数 Array
*
* 2.自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)
*
*
* 3.字面量的方式创建对象
*
*

字面量的方式创建对象
  • JavaScript用一个{...}表示一个对象,键值对以xxx: xxx形式申明,用,隔开。注意,最后一个键值对不需要在末尾加,,如果加了,有的浏览器(如低版本的IE)将报错。
 var object1 = {
                    name:"cc",
                    age:"18",
                    schrool:"第一高级中学",
                    height:"1.70",
                    weight:"150"


                    }

                    console.log(object1);

//打印结果:Object { name: "cc", age: "18", schrool: "第一高级中学", height: "1.70", weight: "150" }

调用系统的构造函数创建对象
  • 调用系统的构造函数创建对象
 var obj = new Object();
    //属性
    obj.name = "CC";
    obj.age = "18;"
    
    //方法
    
    obj.paly = function  () {
        console.log("玩什么");
    }
    console.log(obj.name);
    console.log(obj.paly());
自定义构造函数创建对象
  • 工厂模式创建对象
   //工厂模式创建对象
    
    function creatObject(name,age) {
            var obj = new Object();
            obj.name = name;
            obj.age =age;
            obj.fn = function () {
                console.log("IT程序员");
                };
            
            return obj;
    }
    
    var obj1 = creatObject("CC","18",);
    console.log(obj1.name);
    console.log(obj1.age);
    obj1.fn();
  • 自定义构造函数创建对象

//定义构造函数  注意首字母大写
function Person (name,age) {
    this.name = name;
    this.age = age;
    this.sayHi = function () {
        console.log("你好,我是:"+this.name,"今年:"+this.age);
    };
}

var per = new Person("cc","18");
console.log(per.name);
console.log(per.age);
per.sayHi();
  • 关于 key,如果key为数字,或者包含空格或运算符则要加上引号,在取值的时候要用 ["key名"]来访问
var object1 = {name:"cc",
                    age:"18",
                    schrool:"第一高级中学",
                    height:"1.70",
                    "weight-haha":"150"


                    }
                    console.log(object1.height);
                    console.log(object1["weight-haha"]);
//打印结果:1.70     150
  • 对象的 每一个key我们成为属性(property),属性可以动态创建,不必在对象中声明,它对应的value可以是任意数据类型,如果key对应的是一个函数,那么我们成这个函数为这个对象的方法。
var obj = {
  p: function (x) {
    return 2 * x;
  }
};

obj.p(1)  // 2
对象的引用
  • 如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量
 var o1 = {name:"cc",
        age:"18"};
    var o2 = o1;
        o2.b = "hah";
        console.log(o1);
//打印:
Object { name: "cc", age: "18", b: "hah" }

上面代码中,o1和o2指向同一个对象,因此为其中任何一个变量添加属性,另一个变量都可以读写该属性。此时,如果取消某一个变量对于原对象的引用,不会影响到另一个变量

var o1 = {};
var o2 = o1;

o1 = 1;
o2 // {}

上面代码中,o1和o2指向同一个对象,然后o1的值变为1,
这时不会对o2产生影响,o2还是指向原来的那个对象。

  • 对象是在 堆中存储,而他的是值 是有 栈和堆决定的
引用.jpg
  • 例子
function Person (name,age) {
    this.name = name;
    this.age = age;
    this.salary = salary;
}

function fun (person) {
//person的指针是0x120
    person.name = "CC";
        // 创建新的对象,原来的指向0x120 取消 重新指向0x110
    person = new Person("XX",18,1000);
}
    //创建对象0x120
    var p = new Person("zs",18,1000);
    console.log(p.name);
//指针传递
    fun(p);
   console.log(p.name);
//打印的结果: zs,  XX




案例图片.jpg
属性
  • 对象可以动态的添加属性
  • 可以直接赋值属性
var obj = {};
obj.foo = 'Hello';
obj['bar'] = 'World';
//打印
Object { foo: "Hello", bar: "World" }
  • Object.keys是查看所有的属性
var obj = {
  key1: 1,
  key2: 2
};

Object.keys(obj);
// ['key1', 'key2']
  • delete删除属性
var obj = { p: 1 };
Object.keys(obj) // ["p"]

delete obj.p // true
obj.p // undefined
Object.keys(obj) // []
  • in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false
    -in运算符的一个问题是,它不能识别哪些属性是对象自身的,哪些属性是继承的
var obj = { p: 1 };
'p' in obj // true

  • for…in 循环遍历属性
var object1 = {name:"cc",
                    age:"18",
                    schrool:"第一高级中学",
                    height:"1.70",
                    "weight-haha":"150"


                    }

 for (var i in object1){

        console.log(i);
    }

//打印:
name
age
schrool 
height 
weight-haha


new运算符
  • new 关键字 去声明新的对象

  • new运算符的作用是创建一个对象实例。这个对象可以是用户自定义的,也可以是带构造函数的一些系统自带的对象。

    • 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。
  • new 关键字可以让 this 指向新的对象

// this指向的是函数的调用者 或者是事件的调用者
    function person() {

        this.x = 10;
    }
    var obj2 = new person();
    console.log(obj2.x);

prototype 原型 (就是给类扩充方法或者属性,创建的实例对象都可以使用)
  • 作用:共享数据,节省内存空间
  • 类.prototype.方法 = function() {} 具体格式
 Array.prototype.run = function () {

        console.log("开奔驰");
    }

    var arr = [];
    arr.run();
    var arr1 = [];
    arr1.run();

  1. 构造函数创建实例对象
    2.构造函数有prototype 原型属性指向原型对象
    3.实例对象有proto原型属性 可以间接指向原型对象
构造原型实例之前的关系.jpg

相关文章

  • JavaScript ☞ day2

    JavaScript基础学习笔记之JavaScript提升 了解时间 Date Date对象的方法 Date对象间...

  • Javascript之对象

    对象 注意,最后一个键值对不需要在末尾加,,如果加了,有的浏览器(如低版本的IE)将报错。 访问属性是通过.操作符...

  • JavaScript之对象

    JavaScript中的对象和OC中的字典 Dictionary是一样的,一组“键值对”(key-value)的集...

  • JavaScript之对象

    在ES6出现之前,JavaScript不能真正被称为 面向对象的编程语言,因为 class 仅仅作为其保留字而非关...

  • JavaScript之对象

    什么是面向对象: ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP)。面向对象的语...

  • JavaScript之对象

    什么是对象呢(object) 对象是一个包含相关数据和方法的集合(通常由一些变量和函数组成,我们称之为对象里面的属...

  • Javascript之对象

    本文仅粗略罗列一下对象的基础知识,做个小小总结,不涉及原理。 目录: 对象创建的三种方法 对象访问的两种方法 对象...

  • 原型和原型链

    如何理解javascript的原型 每一个javascript对象在创建时就会与之关联另一个对象,之歌对象就是我们...

  • JavaScript内置对象之对象

    建议学习时长: 60分钟学习方式:深入 学习目标 知道什么是对象 知道如何获取和设置对象的值 详细介绍 对象是一种...

  • 面向对象与原型(三)

    原型 每个 JavaScript 对象都有一个与之相关联的另一个 JavaScript 对象(或null,但这是罕...

网友评论

    本文标题:JavaScript之对象

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