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兼容所有 ...
随机推荐
- NumPy(Numeric Python)使用方法
NumPy官网 参考:<Python数据分析基础教程:NumPy学习指南> 用Python做科学计算(好东西) NumPy是python的核心库,是python机器学习编程的最底层的库,不 ...
- 比对工具之 BWA 使用方法
BWA算法简介: BWA-bactrack BWA-SW BWA-MEM BWA安装: # installing BWA .tar.bz2 -C /opt/biosoft/ cd /opt/bioso ...
- 双心ping GUI工具1.0
双心ping GUI工具1.0该软件利用WindowsAPI提供了图形界面的ping程序,同时还可以调用DOS下的ping命令.ping成功后自动加入网址列表框及同目录下的列表文件Pinglist.i ...
- c语言数据结构:01背包问题-------动态规划
两天的时间都在学习动态规划:小作业(01背包问题:) 数据结构老师布置的这个小作业还真是让人伤头脑,自己实在想不出来了便去网上寻找讲解,看到一篇不错的文章: http://www.cnblogs.co ...
- WebViewJavascriptBridge-Obj-C和JavaScript互通消息的桥梁
转载至:http://www.cocoachina.com/ios/20150629/12248.html 译者:@coderyi9 本文翻译自Marcus Westin的开源框架WebViewJav ...
- javascript之with的使用 弊端
妹的,昨天都快写完了,一不小心点了个关闭,然后...就没有然后了 wordpress的自动保存功能咋就这么不靠谱呢 记得还在懵懂学习JavaScript基础之时,坊间便有传言“with语句是低效率语句 ...
- (17)odoo方法和修饰器
---------------------更新时间:11:06 2016-09-27 星期二18:06 2016-09-18 星期日10:31 2016-03-01 星期二-------------- ...
- js 时间处理
1.格式化时间 function GetDateTimeFormatter(value) { if (value == undefined) { return &q ...
- 在jsp页面解析json的2种方法
方法1: $(function() { $("#btn").click(function() { $.ajax({ url : "fastjson.do", s ...
- template模版与Underscore.js
template模版与Underscore.js 在项目中经常使用的模版是Underscore这个js框架的实用功能. 在html里面设定模板,然后js绑定数据,这样能避免在js中出现非常多的html ...

var c="123";
window.alert(typeof c);