JavaScript-高级-创建对象

ECMAScript 有两种开发模式
一种是面向过程,一种是面向对象。
面向过程:

 <button type="button" onclick="javascript:console.log('1');console.log('2');">按钮</button>

面向对象 :

 <button type="button" onclick="fn1()">按钮</button>
    
    <script>
        function fn1(){
            console.log('1');
            console.log('2');
        }
    </script>

一、创建对象的几种方法

第一种方法:使用对象字面

,这是创建对象简洁明了的一种方法,可以在一条语句中定义和创建对象

用{}即可

var person = {name:'Nanchen', age:12,sex:'男', color:'gray'};
    console.log(person);

效果如图:

 对象也可以横跨多行去书写,效果是一样的

 var person = {
            name: 'Nanchen',
            age: 12, sex: '男',
            color: 'gray'
        };

第二种方法:使用JavaScript关键字new

效果和第一种方法一致

var person = new Object();
        person.name = 'Nanchen';
        person.age = 13;
        person.sex = '男';
        person.color = 'gray';
        console.log(person);

第三种方法:工厂方法创建对象

这种就属于用构造函数创建对象

 function createObject(name, age,sex,color) {
				var box = new Object();
				box.name = name;
				box.age = age;
                box.sex = sex;
                box.color = color;
				box.run = function() {
					// console.log(this);
					return 'ID:'+this.name+' 年龄:'+this.age+' 性别'+this.sex+' 喜欢的颜色'+this.color;
				}
				return box; //很重要
			}
            var a = createObject('Nanchen',18,'男','gray')
                console.log(a);
                console.log(a.run());

 

构造函数和普通函数的唯一区别,就是他们调用的方式不同。 构造函数也是函数,必须用new运算符来调用,否则是无法创建对象的  

探讨构造函数内部的方法(或函数)的问题,首先看下两个实例化后的对象的属性和方法是否相等。

var box1 = new Box('Lee', 100);			//传递一致
var box2 = new Box('Lee', 100);			//同上

alert(box1.name == box2.name);			//true,属性的值相等
alert(box1.run == box2.run);			//false,方法其实也是一种引用地址
alert(box1.run() == box2.run());		//true,方法的值相等,因为传参一致

可以把构造函数里的方法(或函数)用new Function()方法来代替,得到一样的效果,更加证明,他们最终判断的是引用地址,唯一性。  

function Box(name, age) {				//new Function()唯一性
    this.name = name;
    this.age = age;
    this.run = new Function("return this.name + this.age + '运行中...'");
}

我们可以通过构造函数外面绑定同一个函数的方法来保证引用地址的一致性。

如下:

function Box(name,age,sex,color){
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.color = color;
            this.run = boxMethod;
        }
        function boxMethod(){
            console.log(this);
            return 'ID:'+this.name+' 年龄:'+this.age+' 性别'+this.sex+' 喜欢的颜色'+this.color;
        }
        console.log(boxMethod());

使用了全局的函数run()来解决了保证引用地址一致的问题。但需要注意的是,全局函数run中的this,在对象调用的时候是Box本身,而当作普通函数调用的时候,this又代表window。  

function Box(name, age) {
    this.name = name;
    this.age = age;
    this.run = run;
}

function run() {					  //通过外面调用,保证引用地址一致
    console.log(this);
    return this.name + this.age + '运行中...';
}

var box1 = new Box('Lee', 100);	
box1.run();                           //run函数中打印Box对象
run();                                //run函数中打印Window对象

JavaScript对象属性 

 属性是JS对象最重要的部分。属性也可以被修改、添加和删除,但是也有一些特殊属性是只读的。

访问 JavaScript 属性

访问js属性有两种方法可以使用.property 或 ["property"]

    <p></p>
    <script>
        var person = {
            name:'Nanchen',
            age:13,
            sex:'男',
            color:'gray',
            run : function(){
                console.log('你好吗?');
                return person;
            }
        }
        var p = document.querySelector('p');
        p.innerHTML = 'ID:'+person.name+' 年龄:'+person.age+' 性别'+person.sex+' 喜欢的颜色'+person.color;
        //p.innerHTML = 'ID:'+person['name']+' 年龄:'+person['age']+' 性别'+person['sex']+' 喜欢的颜色'+person['color'];//效果一致
        console.log(person.run()); 
    </script>

修改属性:直接更换即可,例如:

person.age = 18;

添加新属性 

假设 person 对象已存在 - 那么您可以为其添加新属性:

person.curriculum= "English";

删除属性

delete 从对象中删除属性: 

delete person.curriculum; 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Southern Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值