2015年05月28日

js对象
面向对象编程的语言中有一个非常重要的参数那就是类的概念,通过类我们可以创建出来各种各样的对象,而ECMAscript中没有类的概念,所以他与别的编程语言中处理对象的方式有所不同
js中对象概念: 无数属性的集合,其属性可以包含基本值,对象或其他函数 在 JavaScript 中,对象是拥有属性和方法的数据。方法是能在对象上执行的动作。
eg:
var people = new object();
people.name="zhangsan";
people,age = 18;
people.fun=function(){
alert(people.name+""+people.age)
}
people.fun();
var people={
      name:"zhangsan",
      age:18,
      say:function(){
          alert(this.name)
      }
  }
people.say();
delete people.name----注意点1:我们可以使用delete删除对象的某个属性
function people(name,age){
        this.name=name;   ---在类中通过this关键字添加的属性输入共有   //那私有的呢?  
        this.age=age;
        this.changeName=function(newName){
            this.name=newName;
        }
    }
    var zhangsan=new people("zhangsan",18);
    zhangsan.changeName("lisi");
    alert(zhangsan.name+" "+zhangsan.age)
当您像这样声明一个 JavaScript 变量时:
var txt = "hello world"; 其实已经声明了一个字符串对象(想想为什么这么说) 字符串对象拥有内建的属性 length。对于上面的字符串来说,length 的值是 5。字符串对象同时拥有若干个内建的方法。  其实 JavaScript 中的所有事物都是对象:字符串、数字、数组、日期,等等。 对象基础部分结束.
创建对象:接下来就说常见的两种方式:
1、工厂模式
function creatpeople(name,age,sex){
var o= new object();
o.name=name;
o.sex = sex;
o.age = age;
o.fun = function(){
alert(this.name);
}
return o;
}
 var zhangsan=createPeople("zhangsan",18,'male');
    alert(zhangsan.name)
2.构造模式:
什么是构造函数?---用于构造一个对象出来的函数, 例如Object  和数组等等
function People (name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
this.fun = function(){
alert(this.name)
}
}
 var zhangsan=new People("zhangsan",18,'male')
    zhangsan.fun();
在这个例子中和工厂模式的区别?直接将属性和方法赋值给了this对象,没有了return语句, 语法注意,构造函数开头字母必须大写
注意点:每个通过构造函数创建出来的对象都有一个constructor属性
例如
alert(zhangsan.constructor)
alert(zhangsan.constructor==People)
注意构造函数毕竟也是函数,也可以当作参数传递
1:var zhangsan=new People("zhangsan",18,'male')---当作构造函数使用
2:People("zhangsan",18,'male')---当作普通函数调用,这里对象会被添加给window对象
    window.fun();
3:注意第三种----友情提示:前方高能
 var o=new Object();
  People.call(o,"zhansgan",18,'male')
   o.fun();
call方法: 
语法:xxx.call([thisObj[,arg1[, arg2[,   [,.argN]]]]])   arguments
定义:调用一个对象的一个方法,以另一个对象替换当前对象。 
说明: 
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 
 function add(a,b)
    {
        alert(a+b);
    }
    function sub(a,b)
    {
        alert(a-b);
    }
    add.call(sub,3,1);
apply方法: 
语法:apply([thisObj[,argArray]]) 
定义:应用某一对象的一个方法,用另一个对象替换当前对象。 
说明: 
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
  function Animal(){
        this.name = "Animal";
        this.showName = function(){
            alert(this.name);
        }
    }

    function Cat(){
        this.name = "Cat";
    }

    var animal = new Animal();
    var cat = new Cat();

    //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。
    //输入结果为"Cat"
    //animal.showName.call(cat,",");
    animal.showName.apply(cat,[]);

实现继承
function Animal(name){      
    this.name = name;      
    this.showName = function(){      
        alert(this.name);      
    }      
}      
    
function Cat(name){    
    Animal.call(this, name);    
}      
    
var cat = new Cat("Black Cat");     
cat.showName(); 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值