js的对象及this

先介绍js创建对象的三种方法

在介绍之前一定要弄清楚一个概念,比如var a = new Object(); 这里的a并不是一个对象,而是一个对象的引用,new Object();才是创建了一个对象并返回一个引用,a是一个变量储存的是对象的引用。

一、用Json创造

<span style="font-size:14px;"><span style="font-size:12px;">var a = {b:1,c:3};
a.b;//1
a.c;//3</span></span>

在这种形式下,一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号),“ ‘键/值' 对”之间使用“,”(逗号)分隔。

二、用内置对象创造

内置的有Array、String、Object等等

<span style="font-size:14px;"><span style="font-size:12px;">var a = new Object();
a.name = 'Nic';
a.age = 16;

var b = a;//b和a同时引用一个对象
b.name;//Nic
b.age;//16</span></span>

三、自定义对象

这个用的很普遍,因为Json有一个缺点就是只能创建一个对象,而自定义的话就如同一个模具,可以创建多个对象。(描述有点不准确)

<1>全用this

<span style="font-size:14px;"><span style="font-size:12px;">function A(name ,age) {
    this.name = name;
    this.age = age;
    this.fun = function (){
        alert('fun');
    };
} 
var a = new A("Nic",16);
a.name;//Nic
a.age;//16
a.fun();//弹出'fun'</span></span>
这样创造对象的特点:写在一个构造函数中,函数中的属性用this.XX = XX;的形式,属性之间‘;(分号)’隔开,创建对象时用new,初始化构造函数。

为什么在function中加this?如果不加this呢?

当你var a = new A("Nic",16);时,A中的this指向a,如果不加this,那么a.name为undefined,特别注意的是如果你不用new,而是var a = A(.....);那么A中的this指向的是Window,“new出来的对象this指向属性和方法依托的对象,不new出来相当于直接调用一个函数,this指向Window。

为什么说自定义的话像一个模具可以创造多个不同对象呢?

是因为只要改变传入的参数,就可以改变对象。

<2>使用prototype(原型)

<span style="font-size:14px;">function A(name ,age) {
    this.name = name;
    this.age = age;
} 

A.prototype.fun = function (){
    alert('fun');
};
var a = new A("Nic",16);
a.name;//Nic
a.age;//16
a.fun();//弹出'fun'</span>
记住一句话,this的属性是私有的,而prototype的是共享的。在两个对象继承时会继承this,而不会继承prototype。

变量ab同时引用一个对象的时候,如果给a单独增加了一个方法a.sum();,那么b是不能调用该方法的。怎么才可以ab都能调用呢?那就给构造函数增加一个prototype的sum方法时,变量ab都可以调用那个方法。可以这么想,构造器是一个爸爸,ab是他的儿子,爸爸有的东西儿子都可以有,但是大儿子自己独有的东西小儿子是不会有的。

prototype这里说的不是很详细,想仔细了解的话可以看这里:http://www.cnblogs.com/mindsbook/archive/2009/09/19/javascriptYouMustKnowPrototype.html

有什么意见欢迎提~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值