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兼容所有 ...
随机推荐
- C 语言字符串连接的 3种方式
C 语言字符串连接的 3种方式 #include<stdio.h> #include<stdlib.h> #include<string.h> char *join ...
- iOS响应式编程:ReactiveCocoa vs RxSwift 选谁好
转载: iOS响应式编程:ReactiveCocoa vs RxSwift 选谁好 内容来自stack overflow的一个回答:ReactiveCocoa vs RxSwift – pros an ...
- 我常用的Webstorm快捷键
ctrl+b 跳转到方法内部 meta:vp + tab 生成移动端 ctrl + alt + l 整理代码 ctrl + shift + up/down 行移动 ctrl + shift + ent ...
- python常见的模块
Python内置模块名称 功能简介 详细解释/使用示例 os 和操作系统相关 os.path — Common pathname manipulations sys 和系统相关 sys — Syste ...
- jquery 设置css样式
$("#61dh a").css('color', 多个样式属性 var divcss = { background: '#EEE', width: '478px', mar ...
- hashtable 实现
#include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct _hashnod ...
- OpenGL基础图形编程
一.OpenGL与3D图形世界1.1.OpenGL使人们进入三维图形世界 我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体.我们又生活在一个充 ...
- @media用法。
@media版本:CSS2 兼容性:IE5+ 语法: @media sMedia { sRules } 说明: sMedia : 指定设备名称.请参阅附录:设备类型 sR ...
- 318. Maximum Product of Word Lengths ——本质:英文单词中字符是否出现可以用26bit的整数表示
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- php header setcookie headers_sent函数 函数检查 HTTP 标头是否已被发送以及在哪里被发送
这里需要注意的 header() 最常被拿來送 header('Location: /'); 等等, 做网页重定向的动作. 在使用 setcookie(), header()... 等函数前 不可以用 ...

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