对象的种种

这里主要讲解各种对象的注意事项:

1. 对象的声明:

有两种:

var a=new Object();

或者

var a={

name="aa"

}

第一种简明式的和第二种直接式的。其赋值是方式是:

对象名.属性=值

a.value=12

a.name="aaa”

等等

2. 对象是引用类型,且会互相引用

如,var a={

a.name="aa"

}

var b=a;//将a对象赋值给b

alert(b.name)

这里会返回"aa",表示b引用了a。然而问题不是这个,当我们更改b的属性:

b.name="bb"

然后:alert(a.name)

会发现,返回的竟然是"bb"

这就意味着,将a赋值给了b,b也能对a的值进行操作。

【这是因为ab属于引用,它们指向的是同一组数据,就像假设a是一个桥,通向对面,现在b复制了这座桥,它也能通向对面了。同时,通过b桥的人对对面进行了一些操作和通过a桥对对面进行操作本质上没有区别,都会对对面产生影响。】

3. 对象中的this

var name = ‘The Window‘;
var object = {
name:‘My Object‘,
getNameFunc:function(){
//var that=this;
return function(){
//把this所指代的对象使用 变量that保存起来,这样即使运行环境发生了改变,that所指代的对象也不会变化
return this.name;
}
}
}
alert(object.getNameFunc()());
this作为js的关键字,有特殊的含义,代表了当前对象,而当前对象是谁,是由函数执行时所处的环境来决定
当环境改变时,this所指代的对象也可能会发生变化

4. 构造函数

function Human(username, age){
 this.username=username;
 this.age=age;
 this.talk=new Function("alert(this.username+‘,‘+this.age)");
}

如上面就是一个简单的构造函数,通过这个函数就可以简单的创造对象了:

var a=new Human("aa",13)

a.talk();

可以返回一个结果出来。

而且,这个函数可以反复利用,创造多个不同对象,对象之间没有干扰。

var a=new Human("aa",13)

var b=new Human("bb",13)

var c=new Human("cc",13)

5 原型 prototype

function Human(username, age){
 this.username=username;
 this.age=age;
 this.talk=new Function("alert(this.username+‘,‘+this.age)");
}

Human.prototype.ww="yahaha"

外部增加属性的方法,这个属性被所有实例公用。

var a=new Human("aa",13)

var b=new Human("bb",13)

var c=new Human("cc",13)

alert(aa.ww)

alert(bb.ww)

6. 对象操作

function Human(username, age){
 this.username=username;
 this.age=age;
 this.talk=new Function("alert(this.username+‘,‘+this.age)");
}

var a=new Human("aa",13)

alert(aa.age)

delete a.age

alert(aa.age)

会发现第一个有反应回复13,第二个就是undefine了。表示这个属性已经被删除了。

7. js的继承

1 prototype 这里所谓的继承(比较特殊的继承),他是所有实例对象共享属性,并且构造函数不能传参。
2 call 使用父类函数的call (子类对象,参数1,参数2,参数3......) 是最常用的
3 apply 使用父类函数的apply (子类对象,[参数1,参数2,参数3.....])

function Human(username, age){
this.username=username;
this.age=age;
this.introduce=function(){
alert(this.username+this.age);
}
this.sex=‘男‘;
}

function Student(username, age, score){
调用父类构造函数进行传参
Human.call(this, username, age);
this.score=score;
this.username=username;
}

function Teacher(username, age){
Human.apply(this, [username, age])
}

Student.prototype = new Human(‘www‘);//只是拷贝Human的属性和方法
Teacher.prototype = new Human();

哪怕你这么写了:

Teacher.prototype = new Human(“aaa",13);

alert(Teacher.age)

也是undefine

只有重新赋值之后才能使用;

Teacher.age=14

alert(Teacher.age)

时间: 2024-10-28 10:55:20

对象的种种的相关文章

第三章 基本概念(第二部分:变量)

二. 变量初步 ECMAScript是一种弱类型语言,表现为变量只是用于保存值的占位符.换言之,变量可以用来保存任何类型的数据. 给变量mind,age赋值: MyMood=”happy”; MyAge=”27”; Js不要求提前声明变量,但是声明变量是一个良好的习惯.你可以一次声明多个变量: var MyMood,MyAge 或者更加精炼: var MyMood=”happy”,MyAge=”27”; 三. 六大数据类型(其实就是变量类型) ECMAScript包括5种简单数据类型和1种复杂数

(转)应用间通信——iOS 的孤岛困境

[核心提示] 和 Android 相比,iOS 的应用间通信机制显得十分薄弱.这一原始的应用间调用方式给开发者和用户都带来了种种负担和不便.打破这种孤岛状态,从系统层面使应用可以相互通信是 iOS 迟早需要迈出的一步. 拍一张照片上传到 Instagram 需要几步? Android 用户: 打开相机 拍照 将照片分享给 Instagram 添加滤镜并发布 iOS 用户: 打开相机 拍照 按 Home 键退回主屏幕 启动 Instagram 从相册选择照片 添加滤镜并发布 在这个使用场景中,An

(转)JavaScript中判断对象类型的种种方法

我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串.如:"number","string","boolean","object","function","undefined"(可用于判断变量是否存在). 但 type

Java进阶(三十四)Integer与int的种种比较你知道多少?

Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱.所以我对它们进行了总结,希望对大家有帮助. 首先看代码: package

我心目中的Asp.net核心对象

想当初在只使用WebForms框架并以服务端为中心的开发模式时,发现Asp.net好复杂.一大堆服务端控件,各有各的使用方法, 有些控件的事件也很重要,必须在合适地时机去响应,还真有些复杂.后来逐渐发现这些复杂的根源其实就是服务器控件相关的抽象逻辑. 随着Ajax越用越多,可能有些人也做过这些事情:[新建一个ashx文件,读取一些用户的输入数据,Form, QueryString, 然后调用业务逻辑代码,将处理后的结果序列化成JSON字符串再发给客户端],这样也能完成一次请求. 不知大家有没有做

(转载)ASP.NET三大核心对象及基础功能解析

原文链接:http://tech.it168.com/a2011/1207/1284/000001284879_all.shtml 想当初在只使用WebForms框架并以服务端为中心的开发模式时,发现Asp.net好复杂.一大堆服务端控件,各有各的使用方法,有些控件的事件也很重要,必须在合适地时机去响应,还真有些复杂.后来逐渐发现这些复杂的根源其实就是服务器控件相关的抽象逻辑.随着Ajax越用越多,可能有些人也做过这些事情:[新建一个ashx文件,读取一些用户的输入数据,Form, QueryS

ORM即 对象-关系映射(转自:微冷的雨)

ORM即 对象-关系映射: 将数据库中的数据关系表,映射为实体对象. 灵动思绪EF(Entity FrameWork) 作者: 微冷的雨  来源: 博客园  发布时间: 2013-01-22 16:28  阅读: 10119 次  推荐: 16   原文链接   [收藏] 很久之前就想写这篇文章了,但是由于种种原因,没有将自己学习的EF知识整理成一片文章.今天我就用CodeFirst和ModelFirst两种方式的简单案例将自己学习的EF知识做个总结. 在讲解EF之前,我们先来看下ORM ORM

Python_09-面向对象编程

目录: 1       面向对象编程1.1    简单例子1.2    调用1.3    python命名规范(约定)1.4    类的设计1.4.1 Exception 异常捕获结构1.4.2 自定义异常1.4.3 __init__. 1.4.4 __new__. 1.4.5 __new__ 的作用1.4.6 用__new__来实现单例1.4.7 静态方法1.4.8 类方法1.5    面向对象编程1.5.1 Python支持多继承1.5.2 多态 (override overload) 1.

Java与C++在面象对象基本概念上的区分

一.引言 众所周知,C++和Java是当今两种主流的面向对象语言,对于两种语言的优劣比较,每个人都有自己不同的看法,比较一致的看法是C++是编译型高级语言而Java是解释型的,因此C++快速而Java兼容性好,C++适合底层控制而Java长于网络编程.不管怎么说,可以肯定的一点是两种语言还会在相当长的一段时间内并存下去,这要求我们在精通两者其一的同时,对另一个也应该至少清楚地掌握其框架结构.因为Java是从C++衍生出来的,所以两种语言在基本语法和概念上都有很多相似之处,然而它们之间也存在一些不