一、最基本的创建方式
var obj = new Object();
obj.name = "zhangsan";
obj.age = 22;
obj.sayHello = function(){
alert("hello,I'm "+this.name);
}
可以这样调用:
obj.sayHello();//hello,I'm zhangsan
优点:创建简单,容易理解
缺点:如果想创建更多的相同类型的对象,每创建对象时都要去重新定义属性和方法
代码量加大,不易维护。
不能创建指定类型的对象,都是object类型的。
二、工厂方法模式
把对象的创建过程封装在函数里面
function createObject(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayHello = function(){
alert("hello,I'm "+this.name);
}
return obj;
}
var o2 = createObject("zhangsan",33);
o2.sayHello();
优点:对象的创建方式变得简易了。创建对象只需调用该方法
缺点:依然没有解决直接创建方式所带来的“不能创建指定类型的对象”问题
三、构造函数模式
function Person(name,age){
this.name = name;
this.age = age;
this.sayHello = function(){
alert("hello,I'm "+name);
}
}
var obj = new Person("zhangsan",22);
obj.sayHello();
优点:解决了前面两种创建方式没有解决的问题,可以创建指定的对象类型
alert(obj instanceof Person); //true
alert(typeof obj); //object
缺点:以上所有方式都存在的一个问题就是:每创建一个实例对象,都会创建一个Function的实例,即代码:
sayhello=function(){
alert("hello,I'm "+this.name);
}
//上面代码等同于
sayHello = new Function(){
alert("hello,I'm "+this.name);
}
这样造成资源的浪费,一种解决方案就是把方法提取出来
function Person(name,age){
this.name = name;
this.age = age;
this.sayHello = sayHello;
}
function sayHello(){
alert("hello,I'm "+this.name);
}
旧问题解决的,但是新的问题也接踵而来,因为这个全局的sayhello 方法本是为Person类型的对象服务的,但却又放在全局作用域中(在浏览器中可以理解为window对象的作用域)
还有一个问题就是他的封装性失去意义。这样就衍生了下面一中模式
四、原型模式
先看代码:
function Person(){
}
Person.prototype.name = "zhangsana";
Person.prototype.age = 22;
Person.prototype.sayHello = function(){
alert("hello,I'm "+this.name);
}
var obj1 = new Person();
obj1.sayHello();
prototype作为每个函数都有的属性,指向一个对象,该对象为特定类型的所有实例共享属性和方法的对象,也就是说,拿上面代码说就是但凡有Person构造方法new 出来的对象都共享name,age,sayHello,而且这下属性和方法内存中只存在一份。附一张草图以便理解,有时间继续写。。。(参考书籍:Professional JavaScript for web Developers Second Edition Nicholas C. Zalas)
- 大小: 11 KB
分享到:
相关推荐
NULL 博文链接:https://redhacker.iteye.com/blog/1457293
javascript面向对象创建对象的方式小结.docx
javascript对象创建方法总结,通过这些方法的总结,可以对对象有了更深一步的了解,也加深了对对象的巩固认识。
文章《javascript对象创建--类、继承》源码
JavaScript对象创建的九种方式
NULL 博文链接:https://redhacker.iteye.com/blog/1458580
javascript创建对象、对象继承的有用方式详解_.docx
NULL 博文链接:https://redhacker.iteye.com/blog/1457020
NULL 博文链接:https://yueyemaitian.iteye.com/blog/781915
JavaScript中的Math对象的与众不同之处在于,它是一个全局对象。在使用Math对象之前,既不需要将一个变量声明为Math对象,也不需要定义一个新的Math对象,JavaScript将自动地创建好Math对象,我们只须直接使用它即可...
javascript对象的创建和访问_.docx
本文实例讲述了javascript面向对象创建对象的方式。分享给大家供大家参考,具体如下: 方式一:通过内置Object对象的方式创建 然后通过点语法,动态给对象创建属性,方法 var o1 = new Object(); o1.name = 'Tom'; ...
下面小编就为大家带来一篇浅谈JavaScript对象的创建方式。小编觉得挺不错的,现在就分享给大家,也给大家做个参考,一起跟随小编过来看看吧
浅析在javascript中创建对象的各种模式_.docx
在javascript中创建对象的各种模式解析_.docx
面向对象的语言具有一个共同的标志,那就是具有“类”的概念,但是在javascript中没有类的概念,在js中将对象定义为“无序属性的集合,其属性可以包含基本值,对象或者函数”,即其将对象看作是一组名值对的散列表。...
如下所示: 代码如下: var person...上面的例子创建了一个名为person的对象,并为它添加了三个属性(name、age和job)和一个方法(sayName())。其中,sayName()方法用于显示this.name()的值。早期的JavaScript开发人员
创建对象的方式 JavaScript Web前端开发技术 创建对象 用new Object创建对象 1.创建对象的方式 创建对象 利用构造函数创建对象 使用构造函数创建对象的语法为“new 构造函数名()”,在小括号中可以传递参数给构造...