JavaScript对象进价

 

1. 对象:  对象是由一组特性构成的一个封装体。Object = Property + Method

function Person(){
 name:'abc',
 age:23,
 sayHello:function(){
  alert("大家好!");
 };
}

2. 对象的废除

    通常我们在用完一个对象后,应该将其设置为null值,以此来保证对象的释放。
    EXTJS

3. 对象的类型
(1) 本地对象
    ECMA-262  "独立于宿主环境的ECMASCript提供的对象",简而言之:官方定义好的对象
如Object、Funtion 、Array、String、Boolean、Date、RegExp、Error、EvalError等

(2) 内置对象
    可以认为它是一种特殊的本地对象,在ECMAScript程序执行时此对象就自动出现了,这意味
着我们不必明确实例化这些对象了. Math和Global
A. Math
   属性: PI
   方法: abs  ceil   floor  pow(x,y)  random  round()
 
   进价: 写一保留任意位小数的四舍五入函数
   function mr(num,fix){
  var x = 10;
  for(var i=1;i<fix;i++){
   x = x*10;
  }
  num = num*x;
  num = Math.round(num);
  num = num/x;
  alert(num);
  return num;
   }

B. Global对象-----------影子对象

   encodeURI()   把字符串编码为uri
   eval()        计算js字符串,并把它作为脚本代码来执行
   isNaN()       是否不是一个数字
   parseFloat()
   parseInt()

 

(3)宿主对象 

官方没有定义,自己构建的对象, 再加上DOM对象和BOM对象 ----  宿主就是所运行的哪个页面

 


4. JS对象类型的确定


typeof: 确定其基本类型---number、object、function、undefined

instanceof: 确定该对象是否属于某个具体的类型
   
   typeof  null ->  object
   typeof  undefined -> undefined
   typeof 数组 -> object
   typeof 函数  -> function


5. JS自定义对象的创建方式.

(1) 工厂方式
      function CarFactory(color,brand){
  var car = new Object();
  car.color = color;
  car.brand = brand;
  car.showColor = function(){
   alert(this.color);
  };
  return car;
 }
 
 function testCar(){
     var car1 = CarFactory('red','天给');
  car1.showColor();
 }

变体:
        function Car(color,brand){
  this.color = color;
  this.brand = brand;
  this.showColor = function(){
   alert(this.color);
  };
 }
 
 function testCar(){
     var car1 = new Car('red','天给');
     car1.showColor();
 }
 

缺点:  在于每次调用showColor方法,都要创建一个新的函数,这意味着每个对象都有
        自己的showColor版本,事实上,每个对象用的都是同一段代码,这样会造成内
       存的浪费.


(2) 原型方式
        function Car2(){}
 Car2.prototype.color = "red";
 Car2.prototype.brand = "MM";
 Car2.prototype.showColor = function(){
   alert(this.color);
 };
 
 
 function testCar(){
     var car1 = new Car2();
  car1.showColor();
 }
 

        缺点: 不能对对象进行个性化, 如果改变里面某一个对象引用类型属性的值,其它对象也就跟着改了.


(3) 混合方式
     
 function Car3(color,brand){
  this.color = color;
  this.brand = brand;
 }
 Car3.prototype.showColor = function(){
  alert(this.color);
 };

 


6. 实现JS的继承

(1) 通过原型来实现继承

        function Person(){
  this.say = function(){
   alert("这是基类中的方法");
  };
 }

 function Teacher(){
 }
 //通过原型来建立继承关系
 Teacher.prototype = new Person();
缺点: 不能为父类的属性动态的设置值


(2) 通过call方法来实现继承

        function Person(name){
  this.name = name;
  this.say = function(){
   alert("这是基类中的方法-"+this.name);
  };
 }

        function Student(name){
  //通过这句将父类和子类关联起来
  Person.call(this,name);
 }

 

(3) 通过apply方法来实现继承

        function Person(name){
  this.name = name;
  this.say = function(){
   alert("这是基类中的方法-"+this.name);
  };
 }

        function Student(name){
  //通过这句将父类和子类关联起来
  Person.apply(this,new Array(name));  //要求传一个数组,而call要求传一个参数列表
 }

  2和3的一个最大的缺点: 不能继承基类用原型方式定义的方法.


(4) 混合方式实现继承
        function Base(name){
  this.name = name;
 }
 Base.prototype.say =  function(){
  alert("你好!我是"+this.name);
 };
 
 
 function Son(name){
  //通过此种方式可以使用父类通过构造方法产生的属性
  Base.call(this,name);
 }
 Son.prototype = new Base();

 

JSTree:

      定义Node对象,----- 递归

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值