js--object对象

1.1 对象的创建
创建一个对象,有两种方法,第一种比较简单,叫做字面量;第二种是用new Object()。

1.1.1 字面量的创建方式
1		var obj = {
2			name : "树懒",
3			age : 18,
4			gender: "男"
5		};
6
7		console.log(obj);
8		console.log(obj.name);
9		console.log(typeof obj);


{}就是对象的界定符,就是对象的字面量。对象有属性,所谓的属性就是这个对象的特点、特性,name、age、gender都是这个obj对象的属性(preperty)。
什么是对象?对象就是属性的无序集合。
------------------------------------------------------------------------
公式:
1{
2	k : v,
3	k : v,
4	k : v,
5	k : v
6}
JSON和对象字面量的区别:
之前学习过JSON,JSON要求所有的k必须加引号,而对象字面量不需要加引号,当然加引号也不错。
JSON = JavaScript Object Notation,JS对象表示法。JSON是一个用于交换的格式,所以JSON不仅仅JavaScript用,后台语言比如PHP、Java、ASP等等都要识别JSON,为了最大的兼容,k必须加引号。也就是说,JSON里面的k加引号,不是因为JS,而是因为后台的那些语言。
JSON要比对象字面量,要严格,严格在哪儿呢?就是所有的k,必须加引号。
JSON:
1{
2	"k" : v,
3	"k" : v,
4	"k" : v,
5	"k" : v
     }
	 
	 -----------------------------------------------------
1.1.2 new Object()创建对象
1var obj = new Object();	//这是一个空对象,里面没有任何属性
2obj.name = "树懒";
3obj.age = 18;
4obj.gender = "男";
5
6console.log(obj);	
7console.log(obj.age);	
8console.log(typeof obj);	

new是一个运算符,你没有看错,和+-*/一样是一个运算符。表示新创建一个对象。一会儿我们学习构造函数,实际上你将了解到new是一个函数调用的方式。Object()大写字母O,这是一个系统内置的构造函数,什么是构造函数,我们稍后讲到。
下面就可以用obj.k = v ;来追加属性了:

二、对象的方法
当一个对象的属性的值,是一个函数,那么这个函数我们就称为对象的“方法”(method)。
1var xiaoming = {
2			name : "小明",
3			age : 18,
4			gender : "男",
5			sayHello : function(){
6				alert("你好,我是" + this.name);
7				alert("今年" + this.age + "岁了");
8				alert("我是可爱的小" + this.gender + "生");
9			}
10		}
11
		xiaoming.sayHello();

比如上面的案例,sayHello就是一个属性,只不过它的值是一个函数,所以我们就可以说xiaoming这个对象,有sayHello方法。
一个对象,方法函数里面的this指的是这个对象。

对象的方法的哲学,就是操作自己的属性。如果一个对象的方法,不操作自己的属性,那干嘛还要是方法呢?
zhangda方法,就是让自己的age++:

三、构造函数
JavaScript规定,一个函数可以用new关键字来调用。那么此时将按顺序发生四件事情:
1)隐秘的创建一个新的空对象
2)将这个函数里面的this绑定到刚才创建隐秘新对象上
3)执行函数体里面的语句
4)返回这个新的对象
1		function People(){
2			this.name = "小明";
3			this.age = 18;
4			this.gender = "男";	
5		}
6		var xiaoming = new People();

函数的新的调用方式:使用new关键字来调用。
此时很有意思,函数不仅仅能够执行,还能返回出来一个对象。也就是说,对象是函数“生”出来的,对象是函数“new”出来的。
我们称呼这个函数,叫做构造函数,一般的,构造函数用大写字母开头。也叫作People“类”。
我们称呼xiaoming这个对象是People类的实例。

四、原型prototype----------用于构造函数
4.1 原型的定义
我们先来看一个事儿:
1		function fun(){
2			alert("你好");
3		}
4
5		console.log(fun.prototype);
6		console.log(typeof fun.prototype);

在JavaScript中,任何一个函数,都有一个prototype属性,指向一个对象。我们输出了一个函数的prototype属性,你会发现是一个空对象。输出这个prototype的类型,发现是object类型。
prototype就是英语“原型”的意思。每个函数都有原型,原型是一个对象。
一个函数的原型,对于普通函数来说,没用。但是如果函数是一个构造函数,那么函数的原型,用处极大

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
v-model本质上是一个语法糖,当绑定在input上后,实际被解析为绑定了value同时绑定了input事件。在Vue中,v-model可以实现双向数据绑定,即数据的改变会同步更新到视图,视图的改变也会同步更新到数据。 实现双向数据绑定的关键是通过Object.defineProperty方法对象的属性进行数据劫持。在Vue中,当使用v-model进行双向数据绑定时,会通过Object.defineProperty来劫持数据的访问和修改。 具体实现过程如下: 1. 使用Object.defineProperty方法对象的属性进行劫持,即在get方法中获取属性的值,在set方法中修改属性的值。 2. 当属性被访问时,会触发get方法,并返回属性的值。当属性被修改时,会触发set方法,并对属性的值进行修改。 3. 当属性的值发生变化时,会触发更新方法(update),从而更新相关的节点,实现视图的更新。 举个例子来说明: ```javascript let json = {} let name = '张三' Object.defineProperty(json, 'name', { get() { console.log("--进入get方法--") return name }, set(newValue) { console.log("--进入set方法--") name = newValue } }) console.log(json.name) // 访问属性的时候,Object.defineProperty进行了拦截,进入get方法 json.name = "李四" // 修改属性时,也进行了拦截,进入set方法 console.log(json.name) // 访问属性的时候,又进行了拦截,进入get方法 ``` 除了使用Object.defineProperty来实现双向数据绑定,Vue还提供了$set方法来给对象新增属性,并触发视图更新。$set方法接收三个参数,分别是对象、属性和值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值