/**

 *在js中并不存在类,所以能够直接通过Object来创建对象,可是使用这样的方式创建有一

 *弊端:因为没有类的约束,无法实现对象的反复利用,而且没有一种规范约定,在操作时easy带来问题。

 */

var person = new Object();

person.name = "octopus";

person.age = 25;

person.say = function(){

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

}

json:json就是js的对象,可是它省去了XML标签,而是通过{}来完毕对象的说明。

var person = {

  name:"张三",

  age:25,

  say:function(){

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

  }

}

//通过json依旧能够创建对象数组,创建方式和js的数组一样。

var ps = [

  {name:"张三",age:25},

  {name:"李四",age:26}

];

for(var i=0;i<ps.length;i++){

  alert(ps[i].name);

}

/**

 * 创建一组用户,用户的属性有:

 * name:String,age:int,friends:Array

 * List<Person> ps = new ArrayList<Person>();

 * ps.add(new Person("张三",25,["Ada","Alice"]));

 * ps.add(new Person("李四",26,["Ada","Chris"]));

 * 把ps转换为json

 */

ps = [

  {

    name:"张三",

    age:25,

    friends:["Ada","Alice"]

  },

  {

    name:"李四",

    age:26,

    friends:["Ada","Chris"]

  }

];

//通过工厂的方式来创建对象

function createPerson(name,age){

  var o = new Object();

  o.name = this.name;

  o.age = this.age;

  o.say = function(){

    alert(this.name+":"+this.age);

  }

  return o;

}

//使用工厂的方式,尽管有效地攻克了类的问题,可是也存在还有一个问题:

//我们无法检測对象p1和p2的详细数据类型,用typeof p1/p2 得到的仅仅能是Object。

var p1 = createPerson("Ada",21); 

var p2 = createPerson("Leon",23);

p1.say();   //Ada:21

p2.say();   //Leon:23

/**

 * 通过构造函数的方式创建,和基于工厂的创建方式类似,

 * 最大的差别就是函数的名称就是类的名称,依照Java约定,第一个字母大写,

 * 使用构造函数创建时,在函数内部是通过thiskeyword来完毕属性的定义。

 */

function Person(name,age){

  this.name = name;

  this.age = age;

  //这样的方式带来的问题是全部的Person对象都会为该行为分配空间

  this.say = function(){

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

  }

}

//通过Person来创建对象

var p = new Person("octopus",24);

p.say();  //octopus,24

/**

 * 使用构造函数的方式能够通过一下方式来检測对象的类型

 */

alert(p1 instanceof Person);  //true

alert(p1.say==p2.say);    //false

/**可是上述构造函数也会带来一些问题:

 * 1.每个对象中都会存在一个方法的拷贝,假设对象的行为非常对的话,空间的占有率就会大大添加

 * 解决方法:能够将函数放到全局变量中定义,这样能够让类中的行为指向同一个函数。

 */

function Person(name,age){

  this.name = name;

  this.age = age;

  //这样的方式带来的问题是全部的Person对象都会为该行为分配空间

  this.say = say;

}

//将行为设置为全局的

function(){

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

}

alert(p1.say==p2.say);  //true

//可是假设将行为设置为全局函数的时候,这个函数就能够被window调用,此时就破坏了对象的封装性。

//并且假设非常多类用全局的方式定义了大量的方法,easy造成混乱,也将不利于开发。

下节我们学习用原型的方式创建对象。

原创文章如转载,请注明出处,本文首发于csdn站点:http://blog.csdn.net/magneto7/article/details/24906045

js:对象的创建(为prototype做铺垫)的更多相关文章

  1. js 对象的创建方式和对象的区别

    js一个有三种方法创建对象,这里做一个总结. 1.对象直接量 所谓对象直接量,可以看做是一副映射表,这个方法也是最直接的一个方法,个人比较建议, 1 2 3 4 5 6 7 8 9 10 11 12 ...

  2. js对象的创建与原型总结

    //1 新建对象 var box = new Object(); box.name = "lee"; box.age = 100; box.run = function(){ re ...

  3. js对象的创建

    一.通过对象直接量来创建 var emptyt={};  //相当于var empty=new Object; //如果属性名中包含空格.连字符(-).还有关键字,保留字时,要用字符串表示 var b ...

  4. js对象的创建模式

    方式一: Object构造函数模式 * 套路: 先创建空Object对象, 再动态添加属性/方法 * 适用场景: 起始时不确定对象内部数据 * 问题: 语句太多 /* 一个人: name:" ...

  5. JS对象的创建与使用

    本文内容:     1.介绍对象的两种类型:     2.创建对象并添加成员:     3.访问对象属性:     4.利用for循环枚举对象的属性类型:     5.利用关键字delete删除对象成 ...

  6. js对象的几种创建方式和js实现继承的方式[转]

    一.js对象的创建方式 1. 使用Object构造函数来创建一个对象,下面代码创建了一个person对象,并用两种方式打印出了Name的属性值. var person = new Object(); ...

  7. js对象小结

    前奏 对象是js的基本数据类型,准确来说除了字符串,数字,boolean值,null与undifine之外,js中的值都是对象.js中的对象是一种复合值,他将很多值(原始值或其他对象)聚合在一起,可以 ...

  8. javascript基础-js对象

    一.js对象的创建 1.普通最简单的方式 var teacher = new Object( ); teacher.name = "zhangsan"; teacher.age = ...

  9. JS对象与PHP对象的对比

    一.对象的创建与访问 1.JS对象的创建与访问 //方式一(通过内置构造函数创建后添加属性) var obj = new Object(); obj.name = 'Lucy'; //通过点添加属性 ...

随机推荐

  1. mktime(将时间结构数据转换成经过的秒数)

    mktime(将时间结构数据转换成经过的秒数)表头文件#include<time.h>定义函数time_t mktime(strcut tm * timeptr);函数说明mktime() ...

  2. ArrayList to Array Conversion in Java

    ArrayList to Array Conversion in Java Following methods can be used for converting ArrayList to Arra ...

  3. asp.net传多个值到其它页面的方法

    网站开发中,在页面之间的跳转,经常会用到传值,其中可能会传递多个值. 一.CommadArgument传多个值到其他页面. 像Gridview dataList repeater等数据绑定控件中,可以 ...

  4. 【WPF】生成二维码

    第一步,下载Google的ZXing类库,以便引用: BitMatrix bitMatrix; private void Button_Click_1(object sender, RoutedEve ...

  5. java_方法

    方法 1.1方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法. 如:小明同学在路边准备坐车来学校学习.这就面临着一件事情(坐车到学校这件事情)需要解决,解决办法呢?可采用坐公 ...

  6. 编写WPF程序,完成弹框打印和直接打印

    弹框打印 PrintDialog pd = new PrintDialog(); pd.ShowDialog(); //↓第一个参数是StackPanel控件里面放一个label放打印的文字 pd.P ...

  7. iOS 9音频应用开发基础教程

    iOS 9音频应用开发基础教程(大学霸内部资料)   介绍:iOS 9音频应用开发基础教程(内部资料)是iOS 9音频应用开发专向教程.本书采用Swift 2.0语言开发基于iOS 9的音频应用.实现 ...

  8. Python Socket多线程并发

    1.SocketServer模块编写的TCP服务器端代码 Socketserver原理图 服务端: import SocketServer #导入SocketServer,多线程并发由此类实现 cla ...

  9. python @classmethod 的使用场合

    python @classmethod 的使用场合 官方的说法: classmethod(function)中文说明:classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实 ...

  10. FastReport.Net使用:[21]表格(Table)控件

    对表格控件的一些常用操作 合并单元格:选择需要合并的单元格(按住Shitf多选),然后在右键菜单中选择[合并单元格].         2.删除/插入行 鼠标移到在行头,当鼠标状态变为向右的箭头时点击 ...