js:对象的创建(为prototype做铺垫)

/**

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

*弊端:由于没有类的约束,无法实现对象的重复利用,并且没有一种规范约定,在操作时容易带来问题。

*/

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约定,第一个字母大写,

* 使用构造函数创建时,在函数内部是通过this关键字来完成属性的定义。

*/

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调用,此时就破坏了对象的封装性。

//而且如果很多类用全局的方式定义了大量的方法,容易造成混乱,也将不利于开发。

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

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

js:对象的创建(为prototype做铺垫),布布扣,bubuko.com

时间: 2025-01-05 06:03:43

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

js对象的创建方式

js对象的创建方式: js也具有OOP编程思想,了解js对象,可以进一步了解js是如何面向对象编程的. js的创建对象方式: 1.   Object var a=new Object();a.name="jack";a.age=20;a.sayName=function () { console.log(this.name);} a.sayName();//打印jack 2.  字面量 var b={name:"rose",age:20,sayName:functi

js:对象的创建(基于组合和动态原型)

基于原型的创建虽然可以有效地完成封装,但是依然存在如下问题: 1.无法通过构造函数来设置属性值 2.当属性中有引用类型变量时,可能存在变量值重复 function Person(){ } Person.prototype = { constructor:Person, name:"Leon", age:30, friends:["Ada","Chris"], say:function(){ alert(this.name+"["

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

js一个有三种方法创建对象,这里做一个总结. 1.对象直接量 所谓对象直接量,可以看做是一副映射表,这个方法也是最直接的一个方法,个人比较建议, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 //创建简单对象 var obj1 = {}; //空对象 var obj2 = {   name: "ys",   age: 12 }; //创建复杂对象 var obj3 = {   name: "ys",   age

js对象的创建

//1 新建对象 var box = new Object(); box.name = "lee"; box.age = 100; box.run = function(){ return this.name+this.age+"运行中"; } alert(box.run()); //lee100运行中 //缺点:不能重复,如果再新建一个对象还要写大量重复代码 //2 工厂模式 function box(name,age){ var obj = new Object

js对象的创建模式

方式一: Object构造函数模式 * 套路: 先创建空Object对象, 再动态添加属性/方法 * 适用场景: 起始时不确定对象内部数据 * 问题: 语句太多 /* 一个人: name:"Tom", age: 12 */ // 先创建空Object对象 var p = new Object() p = {} //此时内部数据是不确定的 // 再动态添加属性/方法 p.name = 'Tom' p.age = 12 p.setName = function (name) { this.

JS对象的创建与使用

本文内容: 1.介绍对象的两种类型: 2.创建对象并添加成员: 3.访问对象属性: 4.利用for循环枚举对象的属性类型: 5.利用关键字delete删除对象成员 6.作为函数参数的对象: ★JavaScript对象有两种类型     1.Native:在ECMAScript标准中定义和描述,包括JavaScript内置对象(数组,日期对象等)和用户自定义对象: 2.Host:在主机环境(如浏览器)中实现并提供给开发者使用,比如Windows对象和所有的DOM对象: ★ 创建对象:定义空对象之后

JS对象与PHP对象的对比

一.对象的创建与访问 1.JS对象的创建与访问 //方式一(通过内置构造函数创建后添加属性) var obj = new Object(); obj.name = 'Lucy'; //通过点添加属性 obj['sex'] = 'female'; //通过[]添加属性 //方式二(通过json格式直接创建添加属性) var obj = {'name':'lily','sex':'female'}; //js对象可通过'.'和'[]'访问属性 console.log(obj.name); conso

JS 面向对象之对象的创建

在学习了面向对象,我们了解了面向对象的三大特性:封装.继承.多态.下面我们需要了解对象的创建方式: 1 字面量创建方式 对象有很多描述方式,比如键值对(key--value)的集合.字典.工具包.对象的本质是对变量和函数进行封装,将变量封装成属性,函数封装为方法:这里我们就是采用字典的方式来创建对象,将属性和方法名作为key 1.1 创建一个书对象 var book = { name:"js入门教学", price:"¥34", author:"刘忻欢&q

js 对象创建及其继承的方法

重新看红皮书,觉得很多知识多看几遍确实是能看的更明白些.今天重温了一下对象创建和继承,就稍微记下来,巩固一下. js是面向对象的编程语言,ECMA-262吧对象定义为:“无序属性的集合,其属性可以包含基本值,对象或者函数”.每个对象都是基于一个引用类型创建的,这个引用类型可以是原生类型,也可以是自定义的. 一,讲讲创建对象的几个方法 1. var person = new Object(); 2. var person = {}; 3. 工厂模式 4. 构造函数模式 5. 原型模式 6. 组合使