<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>Javascript对象的简单学习</title> </head> <body> <script type="text/javascript"> (function(){ /** * 1.Javascript对象的简单学习 */ /* var user = { name : "tom", age : 23, "address" : "USA", //属性名也可以是双引号 sayName : function(){ document.writeln(this.name + "----" + this.address ); } }; //调用 document.writeln(user.name); document.writeln(user.sayName());*/ /** * 2.创建对象:工厂模式。JS中没有类的概念,但是又保留字class,表示未来可能会有类的定义。 */ /* function createUser(name,age) { var obj = new Object(); obj.name = name; obj.age = age; obj.sayName = function() { document.writeln("用户名为:" + this.name + "<br />"); } return obj; } //创建对象 var user1 = createUser("tom",21); var user2 = createUser("jerry",22); //调用 document.writeln(" --- user1:" + user1.name + " <br />"); user2.sayName(); //判断user1类型 document.writeln(" 利用typeof判断user1:" + typeof user1 + "<br />"); //object //document.writeln(" 利用instanceof判断user1:" + user1 instanceof User); document.writeln(" user1的构造方法:" + user1.constructor);//function Object() { [native code] } //说明:虽然通过工厂模式可以创建对象,但是无法知道对象的类型,比如:instanceof */ /** * 3.创建对象:构造函数模式 */ /* function User(name,age) { this.name = name; this.age = age; this.sayName = function() { document.writeln(" --- 构造方法创建函数:" + this.name + "<br />"); }; } //创建对象 var user1 = new User("tom",21); var user2 = new User("jerry",23); //调用 document.writeln(" ---- user1.name :" + user1.name + "<br />"); user2.sayName(); //判断user1类型 document.writeln(user1 instanceof Object); //判断是否为Object类型 → true //document.writeln("判断user1是否为Object类型:" + (user1 instanceof Object) + "<br />"); 注意这么写是不能正常打印。 document.writeln( user1 instanceof User); // 判断是否为User类型 → true document.writeln(user1.sayName == user2.sayName); // false → 说明sayName被创建多次,浪费内存 */ /** * 3.1 构造函数升级版 */ /* function User(name,age) { this.name = name; this.age = age; this.sayName = sayName; } function sayName() { document.writeln(" --- 构造方法创建函数:" + this.name + "<br />"); } //创建对象 var user1 = new User("tom",21); var user2 = new User("jerry",23); //调用 document.writeln(" ---- user1.name :" + user1.name + "<br />"); user2.sayName(); //判断user1类型 document.writeln(user1 instanceof Object); //判断是否为Object类型 → true //document.writeln("判断user1是否为Object类型:" + (user1 instanceof Object) + "<br />"); 注意这么写是不能正常打印。 document.writeln( user1 instanceof User); // 判断是否为User类型 → true document.writeln(user1.sayName == user2.sayName); // true → ★表示是同一个函数,但是其缺点:当方法很多时,需要些很多的全局函数 document.writeln("构造函数:" + user1.constructor); //function User(name,age) { this.name = name; this.age = age; this.sayName = sayName; } */ /** * 4.创建对象:原型对象 */ /* function User(){} User.prototype.name = ""; //初始值为"" User.prototype.age = 0; //初始值为0 User.prototype.sayName = function() { document.writeln(" --- 原型对象创建函数:" + this.name + "<br />"); } //创建对象 var user1 = new User(); user1.name = "tom"; user1.age = 21; var user2 = new User(); user2.name = "jerry"; user2.age = 23; //调用 user1.sayName(); user2.sayName(); //判断user1类型 document.writeln(user1 instanceof Object); //判断是否为Object类型 → true document.writeln(user1 instanceof User); // 判断是否为User类型 → true document.writeln(user1.sayName == user2.sayName);// true → ★表示是同一个函数 document.writeln("构造函数:" + user1.constructor); //function User(){} //缺点:1.不能具有构造函数。2.属性引用对象类型时会发生共享问题。(见下面) */ /* function User(){} User.prototype.name = ""; //初始值为"" User.prototype.age = 0; //初始值为0 User.prototype.address = []; //初始值为空数组[],对象 User.prototype.sayName = function() { document.writeln(" --- 原型对象创建函数:" + this.name + "<br />"); } //创建对象 var user1 = new User(); user1.name = "tom"; user1.age = 21; user1.address.push("USA","CHINA"); var user2 = new User(); user2.name = "jerry"; user2.age = 23; user2.address.push("CANADA"); //调用 document.writeln("user1.address :" + user1.address + "<br />"); //USA,CHINA,CANADA document.writeln("user2.address :" + user2.address + "<br />"); //USA,CHINA,CANADA //判断user1的类型 document.writeln(user1 instanceof Object); //判断是否为Object类型 → true document.writeln(user1 instanceof User); // 判断是否为User类型 → true document.writeln(user1.sayName == user2.sayName);// true → ★表示是同一个函数 document.writeln("构造函数:" + user1.constructor); //function User(){} */ /** * 5.★创建对象: 混合模型 = 构造方法(属性做的比较好) + 原型(方法做的比较好) */ /* function User(name,age) { this.name = name; this.age = age; this.address = []; } User.prototype.sayName = function() { document.writeln(" --- 混合型创建函数:" + this.name + "<br />"); }; //创建对象 var user1 = new User(); user1.name = "tom"; user1.age = 21; user1.address.push("USA","CHINA"); var user2 = new User(); user2.name = "jerry"; user2.age = 23; user2.address.push("CANADA"); //调用 document.writeln("user1.address :" + user1.address + "<br />"); //USA,CHINA document.writeln("user2.address :" + user2.address + "<br />"); //CANADA //判断user1的类型 document.writeln(user1 instanceof Object); //判断是否为Object类型 → true document.writeln(user1 instanceof User); // 判断是否为User类型 → true document.writeln(user1.sayName == user2.sayName);// true → ★表示是同一个函数 document.writeln("构造函数:" + user1.constructor); //function User(name,age) { this.name = name; this.age = age; this.address = []; } */ /** * 6.★创建对象:动态原型模型 */ /* function User(name,age) { this.name = name; this.age = age; this.address = []; //alert(typeof this.sayName); if(typeof this.sayName != "function") { User.prototype.sayName = function() { document.writeln(" --- 动态原型创建对象:" + this.name); } } } //创建对象 var user1 = new User(); user1.name = "tom"; user1.age = 21; user1.address.push("USA","CHINA"); var user2 = new User(); user2.name = "jerry"; user2.age = 23; user2.address.push("CANADA"); //调用 document.writeln("user1.address :" + user1.address + "<br />"); //USA,CHINA document.writeln("user2.address :" + user2.address + "<br />"); //CANADA //判断user1的类型 document.writeln(user1 instanceof Object); //判断是否为Object类型 → true document.writeln(user1 instanceof User); // 判断是否为User类型 → true document.writeln(user1.sayName == user2.sayName);// true → ★表示是同一个函数 document.writeln("构造函数:" + user1.constructor); //function User(name,age) { this.name = name; this.age = age; this.address = []; //alert(typeof this.sayName); if(typeof this.sayName != "function") { User.prototype.sayName = function() { document.writeln(" --- 动态原型创建对象:" + this.name); } } } */ /** * 7.-------------创建对象实例 * 在Javascript中,字符串的拼接将会非常消耗性能。(因为要不断的销毁对象,重建对象) * 解决办法:是创建一个类似Java中的StringBuffer的对象 */ function StringBuffer() { this.array = new Array(); if(typeof this.append != "function") { StringBuffer.prototype.addHan = function(str) { this.array.push(str); }; } } StringBuffer.prototype.toString = function() { return this.array.join(""); }; var sb = new StringBuffer(); sb.addHan("hanchao1"); sb.addHan("hanchao2"); sb.addHan("hanchao3"); document.writeln(sb); })(); </script> </body> </html>
转载于:https://blog.51cto.com/hanchaohan/1309678