web前端一起努力

JavaScript之对象

2018-03-16  本文已影响0人  追逐_chase
timg.jpg
JavaScript中的对象和OC中的字典 Dictionary是一样的,一组“键值对”(key-value)的集合,并且是一种无序的复合数据集合。

对象的创建

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

字面量的方式创建对象
 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();
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
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" }
var obj = {
  key1: 1,
  key2: 2
};

Object.keys(obj);
// ['key1', 'key2']
var obj = { p: 1 };
Object.keys(obj) // ["p"]

delete obj.p // true
obj.p // undefined
Object.keys(obj) // []
var obj = { p: 1 };
'p' in obj // true

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运算符
// this指向的是函数的调用者 或者是事件的调用者
    function person() {

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

prototype 原型 (就是给类扩充方法或者属性,创建的实例对象都可以使用)
 Array.prototype.run = function () {

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

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

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

猜你喜欢

热点阅读