创建对象的几种方法
来源:互联网 发布:百度地图编辑软件 编辑:程序博客网 时间:2024/05/22 00:05
原文地址老聚的博客
使用Javascript创建对象的方法有很多,现在就来列举一下:
1. 使用Object构造函数来创建一个对象,下面代码创建了一个person对象,并用两种方式打印出了Name的属性值。
var person = new Object(); person.name="kevin"; person.age=31; alert(person.name); alert(person["name"])
2. 使用对象字面量创建一个对象;不要奇怪person["5"],这里是合法的;另外使用这种加括号的方式字段之间是可以有空格的如person["my age"].
var person = { name:"Kevin", age:31, 5:"Test" }; alert(person.name); alert(person["5"]);
3. 使用工厂模式创建对象,返回带有属性和方法的person对象。
function createPerson(name, age,job){ var o = new Object(); o.name=name; o.age=31; o.sayName=function() { alert(this.name); }; return o;}createPerson("kevin",31,"se").sayName();
4. 使用自定义构造函数模式创建对象;这里注意命名规范,作为构造函数的函数首字母要大写,以区别其它函数。这种方式有个缺陷是sayName这个方法,它的每个实例都是指向不同的函数实例,而不是同一个。
function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.sayName=function() { alert(this.name); };}var person = new Person("kevin",31,"SE");person.sayName();
5. 使用原型模式创建对象;解决了方法4中提到的缺陷,使不同的对象的函数(如sayFriends)指向了同一个函数。但它本身也有缺陷,就是实例共享了引用类型friends,从下面的代码执行结果可以看到,两个实例的friends的值是一样的,这可能不是我们所期望的。
function Person(){}Person.prototype = { constructor : Person, name:"kevin", age:31, job:"SE", friends:["Jams","Martin"], sayFriends:function() { alert(this.friends); }};var person1 = new Person();person1.friends.push("Joe");person1.sayFriends();//Jams,Martin,Joevar person2 = new Person(); person2.sayFriends();//James,Martin,Joe
6. 组合使用原型模式和构造函数创建对象,解决了方法5中提到的缺陷,而且这也是使用最广泛、认同度最高的创建对象的方法。
function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.friends=["Jams","Martin"];}Person.prototype.sayFriends=function(){ alert(this.friends);};var person1 = new Person("kevin",31,"SE");var person2 = new Person("Tom",30,"SE");person1.friends.push("Joe");person1.sayFriends();//Jams,Martin,Joeperson2.sayFriends();//Jams,Martin
7. 动态原型模式;这个模式的好处在于看起来更像传统的面向对象编程,具有更好的封装性,因为在构造函数里完成了对原型创建。这也是一个推荐的创建对象的方法。
function Person(name,age,job){ //属性 this.name=name; this.age=age; this.job=job; this.friends=["Jams","Martin"]; //方法 if(typeof this.sayName !="function") { Person.prototype.sayName=function() { alert(this.name); }; Person.prototype.sayFriends=function() { alert(this.friends); }; }}var person = new Person("kevin",31,"SE");person.sayName();person.sayFriends();
0 0
- js创建对象的几种方法
- js创建对象的几种方法
- 几种创建js对象的方法
- JS创建对象的几种方法
- JS创建对象的几种方法
- JS创建对象的几种方法
- JS创建对象的几种方法
- Javascript创建对象的几种方法
- JS创建对象的几种方法
- js创建对象的几种方法
- 创建对象的几种方法
- js创建对象的几种方法
- Java创建对象的几种方法
- java创建对象的几种方法
- JS创建对象的几种方法
- 创建对象的几种方法
- js创建对象的几种方法
- Java 创建对象的几种方法
- 【服务器编程】多线程安全数据库连接池
- UVA - 10878 Decode the tape
- SCU2016-01 P 二分 + 叉积应用
- UVA - 10815 Andy's First Dictionary
- PHP YIELD使读取大文件变成可能
- 创建对象的几种方法
- SpringMVC常用注解,返回方式,路径匹配形式,验证【转】
- 设计模式--模板方法模式
- classpath路径【转】
- 虚幻4 dump 材质编辑器编译出来的 shader的hlsl文件
- CodeForces - 686B
- 【杭电oj】5246 - 超级赛亚ACMer(二分 & 贪心 & STL)
- Android学习第3天,test、sqlite、listview、dialog
- 华为机试---学英语