1.工厂模式

function createObj(name, sex){
var obj = new Object();
obj.name = name;
obj.sex = sex;
obj.sayName = function(){
alert(this.name);
}
return obj;
} var person = createObj('Tom', 'man');

缺点:①无法确定对象的类型(因为都是Object)。

   ②创建的多个对象之间没有关联。

2.构造函数

function createObj(name, sex){
this.name = name;
this.sex = sex;
this.sayName = function(){
alert(this.name);
}
} var person = new createObj('Tom', 'man');

缺点:①多个实例重复创建方法,无法共享。

     ②多个实例都有sayName方法,但均不是同一个Function的实例。

3.原型方法

function createObj(){}

    createObj.prototype.name = 'Tom';
createObj.prototype.sex = 'man';
createObj.prototype.sayName = function(){
alert(this.name);
} var person = new createObj();

缺点:①无法传入参数,不能初始化属性值。

     ②如果包含引用类型的值时,改变其中一个实例的值,则会在所有实例中体现。

4.组合式(构造函数+原型方法)推荐使用

function createObj(name, sex){
this.name = name;
this.sex = sex;
}
createObj.prototype.sayName = function(){
alert(this.name);
} var person = new createObj('Tom', 'man');

优点:构造函数共享实例属性,原型共享方法和想要共享的属性。可传递参数,初始化属性值。

5.动态原型方法

function createObj(name, sex){
this.name = name;
this.sex = sex;
if(typeof this.sayName != 'function'){
createObj.prototype.sayName = function(){
alert(this.name);
}
}
} var person = new createObj('Tom', 'man');

说明:if语句中只会调用一次,就是在碰到第一个实例调用方法时会执。此后所有实例都会共享该方法。在动态原型方法下,不能使用对象字面量重写原型。

比较js中创建对象的几种方式的更多相关文章

  1. js中创建对象的几种方式

    创建对象指创建一个object并给这个对象添加属性和方法,有以下几个方式: 最基本的: var Person={}; Person.name='tom'; Person.age='20'; Perso ...

  2. js中创建对象的三种方式

    1. 对象字面量 var obj={ name:"小小", age:3, car:{ brand:"baoma", } }; } 2.使用内置构造函数 var ...

  3. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

  4. Java中创建对象的五种方式

    我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...

  5. 【转】Java中创建对象的5种方式

    Java中创建对象的5种方式   作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有 ...

  6. JavaScript中创建对象的三种方式!

    JavaScript中创建对象的三种方式! 第一种 利用对象字面量! // 创建对象的三种方式! // 1 对象字面量. var obj = { // 对象的属性和方法! name: 'lvhang' ...

  7. JS 面向对象 ~ 创建对象的 9 种方式

    一.创建对象的几种方式 1.通过字面量创建 var obj = {}; 这种写法相当于: var obj = new Object(); 缺点:使用同一个接口创建很多单个对象,会产生大量重复代码 2. ...

  8. Javascirpt中创建对象的几种方式

    js是一种动态语言,即js的对象创建好之后可以随意修改,因此JS对象的面向对象编程部分更可以说是通过JS的怪异特性来模拟Java这类的面向对象编程的.下面首先讨论几种创建对象的方式: 1. 工厂模式创 ...

  9. Java中创建对象的5种方式

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...

随机推荐

  1. C#中如何截取Windows消息来触发自定义事件

    原文 C#中如何截取Windows消息来触发自定义事件 在c#windows开发中,我们常常会遇到拦截windows消息,来触发某个特定任务的问题. 由于目前使用c#的开发人员非常多,而且大多数c#程 ...

  2. Mac OS 终端常用命令【搜藏】

    基础概念 OS X 采用的Unix文件系统,所有文件都挂在跟目录“ /” 下面,所以不在要有Windows 下的盘符概念.比如什么“C:”你在桌面上看到的硬盘都挂在 /Volumes 下.比如接上个叫 ...

  3. 类内const static(static const)成员变量初始化问题

    在查找const相关资料的过程中,又遇到了另外一个问题,就是C++类中const static(或者static const)成员变量应当如何初始化的问题. 查阅了许多资料,发现VC环境下,只允许co ...

  4. inline和宏之间的区别

    1.内联函数在编译时展开,而宏在预编译时展开 2.在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换. 3.内联函数可以进行诸如类型安全检查.语句是否正确等编译功能,宏不具有这 ...

  5. 利用XSD配合XSLT產出特定格式Word檔案 -摘自网络

    利用類別產生XSD檔 產出XSD檔的目的在於提供Word樣板設計之資料框架 在此使用微軟提供之XML Schema Definition Tool (Xsd.exe)工具產生XSD檔 1. 定義類別 ...

  6. 从assemblyer Instructure deepth understander C principle

    要彻底搞清楚C语言的原理,就必须深入到指令一层去理解.你写一行C代码,编译器会生成什么样的指令,要做到心中有数;

  7. NSThead

    每个iOS应用程序都有个专门用来更新显示UI界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将 ...

  8. vertical-align:top在单词和中文的表现

    <ul> <li> <img src="../../saasdist_v2/images/staff-img.png" alt="" ...

  9. <转>使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机

    准备 今天将cocos2d-x的示例项目tests编译到android真机运行,以及如何创建cocos2d-x的android项目. 打开cocos2d-x的tests项目,路径为:D:\cocos2 ...

  10. 【转】/etc/grub.conf文件详解

    转自:http://leejia.blog.51cto.com/4356849/788902 grub.conf是grub的主配置文件,通过这个配置文件,grub才能找到kernel,系统才能正常启动 ...