js:对象的创建(为prototype做铺垫)
/**
*在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做铺垫)的更多相关文章
- js 对象的创建方式和对象的区别
js一个有三种方法创建对象,这里做一个总结. 1.对象直接量 所谓对象直接量,可以看做是一副映射表,这个方法也是最直接的一个方法,个人比较建议, 1 2 3 4 5 6 7 8 9 10 11 12 ...
- js对象的创建与原型总结
//1 新建对象 var box = new Object(); box.name = "lee"; box.age = 100; box.run = function(){ re ...
- js对象的创建
一.通过对象直接量来创建 var emptyt={}; //相当于var empty=new Object; //如果属性名中包含空格.连字符(-).还有关键字,保留字时,要用字符串表示 var b ...
- js对象的创建模式
方式一: Object构造函数模式 * 套路: 先创建空Object对象, 再动态添加属性/方法 * 适用场景: 起始时不确定对象内部数据 * 问题: 语句太多 /* 一个人: name:" ...
- JS对象的创建与使用
本文内容: 1.介绍对象的两种类型: 2.创建对象并添加成员: 3.访问对象属性: 4.利用for循环枚举对象的属性类型: 5.利用关键字delete删除对象成 ...
- js对象的几种创建方式和js实现继承的方式[转]
一.js对象的创建方式 1. 使用Object构造函数来创建一个对象,下面代码创建了一个person对象,并用两种方式打印出了Name的属性值. var person = new Object(); ...
- js对象小结
前奏 对象是js的基本数据类型,准确来说除了字符串,数字,boolean值,null与undifine之外,js中的值都是对象.js中的对象是一种复合值,他将很多值(原始值或其他对象)聚合在一起,可以 ...
- javascript基础-js对象
一.js对象的创建 1.普通最简单的方式 var teacher = new Object( ); teacher.name = "zhangsan"; teacher.age = ...
- JS对象与PHP对象的对比
一.对象的创建与访问 1.JS对象的创建与访问 //方式一(通过内置构造函数创建后添加属性) var obj = new Object(); obj.name = 'Lucy'; //通过点添加属性 ...
随机推荐
- 深度学习方法(九):自然语言处理中的Attention Model注意力模型
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.NET/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 上一篇博文深度学习方法(八):Enc ...
- WordPress 用户管理插件 WP User Manager
WP User Manager 是一个较新的用户管理插件,可以在前端实现 用户注册.登录.找回密码.修改个人资料.修改密码等功能,如果你在找这方面的插件,WP User Manager 应该是一个不错 ...
- 关于Web2.0概念的一篇小短文
Web2.0程序设计的第一篇作业,写了就顺手放上来吧. 在互联网泡沫破裂数年后,Tim O'Reilly与John Battelle总结了互联网产业复兴过程中出现的一系列现象,在2004年举办的第一届 ...
- vue中methods、watch、computed之间的差别对比以及适用场景
首先要说,methods,watch和computed都是以函数为基础的,但各自却都不同: 一.computer 当页面中有某些数据依赖其他数据进行变动的时候,可以使用计算属性. <p id=& ...
- python中调用cmd
1. 使用os.system("cmd") 这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息.使用前需要import os. os.system(&q ...
- 湖南大学ACM程序设计新生杯大赛(同步赛)H - Yuanyuan Long and His Ballons
题目描述 Yuanyuan Long is a dragon like this picture? I don’t know, ...
- 【交叉染色法判断二分图】Claw Decomposition UVA - 11396
题目链接:https://cn.vjudge.net/contest/209473#problem/C 先谈一下二分图相关: 一个图是二分图的充分必要条件: 该图对应无向图的所有回路必定是偶环(构成该 ...
- Java反射机制demo(二)—通过Class实例化任意类的对象
Java反射机制demo(二)—通过Class实例化任意类的对象 上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例. 任意一个类 ...
- 在Azure中创建asp.net core 应用
0.前言 在玩转Azure之前首先大家要有Azure账号,或者可以先申请一下微软的账号,然后进行与Azure的关联(azure账号是免费的).但是关联的步骤还是很有意思的,他需要VISA国际信用卡(我 ...
- 后台开发常用mysql语句_v1.0
目录 一.基本信息查看 1. 表描述 二.表操作 1. 查看建表语句 2.查看表 3. 创建表 4. 更新表 5. 删除表 6. 重命名表 三.索引操作 1. 查看索引 2. 创建索引 3. 修改索引 ...