Javascript基础--类与对象(五)
js面向(基于)对象编程
1.澄清概念
1.1 js中基于对象 == js 面向对象
1.2 js中没有类class,但是它取了一个新的名字,交原型对象,因此 类 = 原型对象。
2.为什么需要对象?
//这里是一个Cat类
function Cat(){
}
Cat(); //函数
function Cat(){}
2 var cat1 =new Cat(); //类
3 //这时cat1就是一个对象(实例)
4 cat1.name = "小白";
5 cat1.age =3;
6 cat1.color ="白色";
7 //从上面的代码我们可以看出
8 //1.js中的对象的属性可以动态的添加。
9 //2.属性没有限制
10 window.alert(cat1.name);
3.类和对象的区别和联系
3.1 类是抽象的,概念,代表一类事物。
3.2 对象是具体的,代表一个实体。
3.3 对象是以类(原型对象)为模板创建。
4.创建对象的方式有5种
4.1 工厂方式--使用new Object创建对象并添加相关属性
4.2 使用构造函数来定义类(原生对象)。目前以这个方法为主
4.3 使用prototype
4.4 构造函数及原型混合方式
4.5 动态原型方式
5.使用构造函数来定义类(原生对象),然后再创建对象实例
基本语法
function 类名/原型对象名(){
}
创建对象
var 对象名 = new 类名();
function Person(){}
window.alert(Person.constructor);
var a = new Person();
window.alert(a.constructor);
window.alert(typeof a);
var b=123;
window.alert(b.constructor);
window.alert(typeof b);
var c="123";
window.alert(c.constructor);
window.alert(typeof c);
js中的一切都是对象
如何判断一个对象实例是不是Person类型
window.alert(a);
if(a instanceof Person){
window.alert("a是PersonOK1");
} if(a.constructor == Person){
window.alert("a是PersonOK2");
}
6.带 var 和不带 var的区别
//全局变量
var abc =89;
function test(){
//再函数里,如果你不带var,则表示使用全局的abc变量
//如果你带上var则表示在test()中,定义一个新的abc变量
abc = 900;
}
test();
window.alert(abc);
访问对象的属性方法有两种:
(1) 普通方式:对象名.属性名
(2) 动态访问:对象名["属性名"]
function Person(){};
var p1 = new Person();
p1.name ="顺平";
window.alert(pl.name);
var val="na"+"me";
window.alert(pl[val]);
var a =new Person();
a.age=10;
a.name="小明";
var b = a;
b.name ="小白";
window.alert(b.age+"名字 "+b.name+"名字 "+a.name);
对象回收机制(GC)
(1)设置变量为null;
b=null; //相当下图中,在栈中把b的地址清空(b = ox1234给清空),此时a中地址没有清空,还是指向堆中ox1234[10,“小白”]
window.alert(a.age + "a名字" +a.name);
window.alert("b.age=" + b.age);
//a = null;
当引用次数为0时,不会立即回收内存空间,有一定的回收机制。
(2)js还提供一种方式,主动释放对象内存
delete 对象名.属性名; \\这样就会立即释放 对象的这个属性空间
var a =new Person();
a.age=10;
a.name="小明";
var b = a;
b.name ="小白";
window.alert(b.age+"1名字 "+b.name);
delete a.age; //删除a对象
window.alert(b.age+"2名字 "+b.name);
window.alert(a.age+"3名字 "+a.name);
7. this 关键字
function Person(){
var p1 = new Person();
p1.name = "顺平";
p1.age = 60;
window.alert(p1.name +" "+p1.age);
var p2 = new Person();
window.alert(p2.name);//这里会输出什么?(undefine);
}
这里我们可以看到 window.alert(p2.name) 会输出 undefined;
在实际编程中,我们可能有这样的需求,当我们创建一个对象后,就希望该对象自动的拥
有某些属性[比如:当我们创建一个Person对象后,就希望该对象就自动拥有name和age属性,
这又怎么办?]
使用this来解决:
function Person(){
this.name = "abc";
this.age = 90;
} var p1 =new Person();
var p2 =new Person();
p2.name = "顺平";
window.alert(p1.name +" " +p2.name);
//可能大家会这样去思考问题:
function Person(){
var name ="abc"; //如果这样去使用name这个属性是私有的
var age = 900; //私有的,只能在内部使用
this.name ="abc2" //this.name2表示name2这个属性是公开的
this.show =function(){ //这个就是Person类的一个公开的方法(特权方法)
window.alert(name+" "+age);
show2();
}
function show2(){ //这是Person类的一个私有方法,只能在Person中使用
window.alert("show2()"+name+" "+age);
}
}
var p1 = new Person();
p1.show();
//p1.show2(); //z这里会报错!对象不支持此属性或方法
//window.alert(p1.name +" "+p1.age); //错误
function test1(){
alert(this.v);
}
var v=90;
5 window.test1();
function Person(){
this.abc = function(){
window.alert(this.v);
}
} var p = new Person(); p.v = "hello"; p.abc();
哪个对象实例调用this所在的函数,那么this就代表哪个对象实例。
注意事项:
this 不能放在类的外部使用,否则调用者就变成window
Javascript基础--类与对象(五)的更多相关文章
- Javascript创建类和对象
现总结一下Javascript创建类和对象的几种方法: 1.原始的创建方法: <script type="text/javascript"> var person = ...
- 扩展javascript扩展(类,对象,原型)
扩展javascript扩展(类,对象,原型)
- 第31节:Java基础-类与对象
前言 Java基础-类与对象,方法的重载,构造方法的重载,static关键字,main()方法,this关键字,包,访问权限,类的继承,继承性,方法的重写,super变量. 方法的重载:成员方法的重载 ...
- 我所了解的关于JavaScript定义类和对象的几种方式
原文:http://www.cnblogs.com/hongru/archive/2010/11/08/1871359.html 在说这个话题之前,我想先说几句题外话:最近偶然碰到有朋友问我“hois ...
- JavaScript定义类与对象的一些方法
最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (fu ...
- C++基础-类和对象
本文为 C++ 学习笔记,参考<Sams Teach Yourself C++ in One Hour a Day>第 8 版.<C++ Primer>第 5 版.<代码 ...
- ios开发之OC基础-类和对象
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
- javascript:类数组 -- 对象
在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 类数组:本质是一个对象,只是这个 对象 的属性有点特殊,模拟出数组的一些特性. 一般来说,如果我们有一个 ...
- OC基础:类和对象 分类: ios学习 OC 2015-06-12 18:55 17人阅读 评论(0) 收藏
OC:Objective-c 面向对象的c语言,简称obj-c或者OC OC和C的区别 1.OC是C语言的超集,OC是在C语言的基础上结合smalltalk的优点,开发出来的语言.oc兼容所有 ...
随机推荐
- phalcon: router规则与解析,已经生成router的链接地址
本人采用的是假分模块(目录),通过命名空间来进行模块分组的,非官方分组,所以在router是都会加上 namespace 信息,你也可适当的参考: 前提: /** * 注册命名空间 */ $loade ...
- Global Alignment(全局比对)--从算法(Needleman-Wunsch)到python实现
很早就知道有全局比对和局部比对这两种比对方法,都是用到的动态规划的思想,知道一些罚分矩阵的概念,但一直都没有机会搞透彻,一些算法的细节也不太清楚,也没有亲手编程实现. 现在由于项目需求,需要手动写一个 ...
- [你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理
原文地址:http://kb.cnblogs.com/page/42318/ 系列文章导航: [你必须知道的.NET] 开篇有益 [你必须知道的.NET] 第一回:恩怨情仇:is和as [你必须知道的 ...
- 理论与实践中的 C# 内存模型
转载自:https://msdn.microsoft.com/magazine/jj863136 这是该系列(包含两部分内容)的第一部分,这部分将以较长的篇幅介绍 C# 内存模型. 第一部分说明 C# ...
- [Tomcat] Tomcat远程调试
如何用eclispe远程调试tomcat 关键步骤: 1)修改启动脚本startup.bat 复制startup.bat为startup-debug.bat,然后打开startup-debug.bat ...
- (09)odoo工作流
--------------修订时间14:54 2016-09-18 星期日21:59 2016-06-12 星期日10:06 2016-02-24 星期三17:14 2016-01-29 星期五-- ...
- 第四周 技术随笔psp
本周psp 类型 内容 开始时间 结束 打断时间 净时间 写随笔 Scrum会议 23:46 00:27 0 41分
- 如何设置一个严格30分钟过期的Session
今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察 ...
- WebForm MapPageRoute 路由配置(转载)
使用场景是:MVC 混合使用 WebForm,然后对 WebForm 进行路由配置 http://www.cnblogs.com/xishuai/archive/2015/02/26/web-form ...
- 位运算取第一个非0的位 r & (~(r-1))
Single Number III Given an array of numbers nums, in which exactly two elements appear only once and ...