javascript (对象构建方式)

来源:互联网 发布:sql%rowcount merge 编辑:程序博客网 时间:2024/06/05 11:00

1、  Function对象

Javascript没有重载的概念每个对象隐含 arguments对象(实际接收的参数),length属性接收对象期望的参数个,arguments.length,表示实际接收参数个数 ;

var add =function(number){alert(number);};

等价于 var add= new Function(“number”, “alert(number)”);// 最后一个参数表示函数体

 等价于 function add(number){alert(number)};

因为是对象的引用,多个同名函数会被最后一个覆盖,与参数个数无关

2、  数据类型:Undefined(undefined)、Null(null)、Number(number)、String(string)、Boolean(true/false)共5种原始数据类型var s = “a”; alert(typeof s) return 'string'

typeof 返回值 'undefined'、'object、'number'、'string'、'boolean'

javascript 如果声明的函数没有返回值或return,那么返回undefined—undefined是从null派生出来的

强制类型转换:只有三种 Boolean(value), String(value),Number(value):数字转换错误return NaN,未定义不可以转换,Boolean没什么用,不建议使用。

3、  Javascript 可以动态的添加、删除属性

Object obj = new Object();

obj.username = “zhangsan”;// obj[“usernam”]= “zhangsan”;

delete obj.username;//

var object = {username: “zhangsan”, password: “lisi”,gender:function(){…}}//最常见的定义对象的方式,属性用逗号隔开

4、  数组

var array = new Array();

array.push(1);

array.length

// var array = [1, 3, 23];// 更常用

Arrays.sort(array);// 1,23,3,先转换成字符,按字符串升序排序,显然不可靠,一般自定义排序

类似java

function compare (num1, num2)

{

     varnum1 = parseInt(num1);

     varnum2 = parseInt(num2);

     if(num1 < num2) return -1;

     elseif(num1 > num2) return 1;

     else  return 0;   

}

Var array = [1, 3, 25];

array.sort(compare);// 函数名是对象的引用

arrayà [1 3 25]

5、  创建对象的方式(Javascript只有对象的概念)

A:    // 1: 基于已有的对象进行扩充

      var object = {username: “zhangsan”, password: “lisi”,gender:function(){…}}//最常见的定义对象的方式,属性用逗号隔开

      --------------------------------------------------------------------------

      var object = newObject();//比较适合临时创建的对象

      object.name ="zhangsan";

      object.password ="123";

      object.sayName =function(name)

     {

           this.name =name;

           alert(this.name);

      }

     object.sayName("lisi");

B: // 2: 工厂方法       

      function createObject(name, password)

      {

           var object = newObject();

           object.name =name;

           object.password= password;

           /*

           object.get =function()

           {

               alert(this.name+ ", " + this.password);

           }

           */

           object.get =get;// 推荐.属性独有,方法共享

           return object;

      }

      function get()

      {

           alert(this.name+ ", " + this.password);

      }

      var obj1 =createObject("zhangsan", "123");

      obj1.get();

      var obj2 =createObject("wanger", "3434");

      obj2.get();

C:// 3: 构造函数方式

      function Person(name,password)

      {

           this.name =name;

           this.password =password;

           this.getInfo =function()

           {

               alert(this.name+ ", " + this.password);

           }

           // 隐含生成的对象

      }

 

      var p = newPerson("zhangsan", "wanger");

      p.getInfo();

D // 4: 使用原型方式(prototype); 属性值必须在对象生成之后赋值;属性引用方式(值改变)和Java是一样的;属性会被其他对象共享,该变属性,其他对象可以能发生改变,如果是引用类型的话,常量类型的则不会发生改变

      function Student(){}

      Student.prototype.name= "zhangsan";

      Student.prototype.password= "lkjldjfl";

      Student.prototype.getInfo= function()

      {

           alert(this.name+ ", " + this.password);

      }

      var s1 = newStudent();

      s1.getInfo();

E:// 5: 使用原型 + 构造函数定义对象(实现:属性不共享,方法共享)

 function Person()

 {

      this.name = new Array();

      this.password ="123";// 定义的时候记得初始化

 }

 Person.prototype.getInfo = function()

 {

      alert(this.name +", " + this.password);  

 }

 var p1 = new Person();

 var p2 = new Person();

 p1.name.push("张三");

 p2.name.push("里斯");

 p1.getInfo();

 p2.getInfo();

6、  对象的继承inheritance

// javascript 继承:1、对象冒充

      function Parent(name)

      {

           this.name =name;

           this.sayName =function()

           {   

               alert(this.name);

           }

      }

      function Sun(name,age)

      {

           this.method = Parent;// 此种方式在prototype定义的方法不能被继承,不推荐使用

           this.method(name);

           delete this.method;

           this.age = age;

           this.sayAge =function()

           {

               alert(this.age);

           }

      }

 

      var p = new Parent("zhangsan");

      var s = new Sun("lisi", 20);

      p.sayName();

      s.sayName();

      s.sayAge();

第二种方式:// call 方法是Function 对象中的方法,因此我们定义的每一个函数都有call方法,call方法第一个参数会被传递给函数中的this,从第二个参数开始,会依次传递给函数(调用者)中的参数

 /** test call 的用户

      function test(str1,str2)

      {

           alert(this.name+ ", " + str1 + ", " + str2)

      }

      var object = newObject();

      object.name ="zhangsan";

      object.arg1 = 30;

      test.call(object, "aa", 20);

          */

// 使用call实现inheritance

      function Daughter(name, gender)

      {

           Parent.call(this,name);

           this.gender =gender;

           this.getInfo =function()

           {

               alert(this.gender);

           }

      }

      //test code

      var d = new Daughter("Rose",27);

      d.sayName()

     d.getInfo();

第三种// 使用apply 实现 inheritance ,类似call

      functionDaughter2(name, gender)

      {

          Parent.apply(this, new Array(name,...));//[name],采用数组传递参数,而call采//用离散的方式

           this.gender =gender;

           this.getInfo =function()

           {

               alert(this.gender);

           }

      }

      var d2 = newDaughter2("Rose2", 37);

      d2.sayName()

     d2.getInfo();

第四种// 使用原型链 实现混合方式继承 推荐

      function Parent2(name)

      {

           this.name =name;

      }

 

      Parent2.prototype.sayName= function()

      {

           alert(this.name);

      }

 

      function Sun2(name,age)

      {

           Parent2.call(this,name);// 实现属性继承

           this.age = age;

      }     

      Sun2.prototype = new Parent2(); // 继承父对象的原型

      Sun2.prototype.sayAge= function()

      {

           alert(this.age);

      }

      // Test code

      var sun2 = newSun2("王二", 100);

      sun2.sayName();

     sun2.sayAge();

7、  Firebug技巧:

function showLog(msg)

{

console.log(msg);

console.info(msg);

console.warn(msg);

console.error(msg);

console.debug(msg);

}

 function test(name)

{

 showlog(name);

}

showlog(“test”);

8、   

原创粉丝点击