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基础--类与对象(五)的更多相关文章

  1. Javascript创建类和对象

    现总结一下Javascript创建类和对象的几种方法: 1.原始的创建方法: <script type="text/javascript"> var person = ...

  2. 扩展javascript扩展(类,对象,原型)

     扩展javascript扩展(类,对象,原型)

  3. 第31节:Java基础-类与对象

    前言 Java基础-类与对象,方法的重载,构造方法的重载,static关键字,main()方法,this关键字,包,访问权限,类的继承,继承性,方法的重写,super变量. 方法的重载:成员方法的重载 ...

  4. 我所了解的关于JavaScript定义类和对象的几种方式

    原文:http://www.cnblogs.com/hongru/archive/2010/11/08/1871359.html 在说这个话题之前,我想先说几句题外话:最近偶然碰到有朋友问我“hois ...

  5. JavaScript定义类与对象的一些方法

    最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (fu ...

  6. C++基础-类和对象

    本文为 C++ 学习笔记,参考<Sams Teach Yourself C++ in One Hour a Day>第 8 版.<C++ Primer>第 5 版.<代码 ...

  7. ios开发之OC基础-类和对象

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  8. javascript:类数组 -- 对象

    在javascript中,对象与数组都是这门语言的原生规范中的基本数据类型,处于并列的位置. 类数组:本质是一个对象,只是这个 对象  的属性有点特殊,模拟出数组的一些特性. 一般来说,如果我们有一个 ...

  9. 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兼容所有 ...

随机推荐

  1. phalcon: router规则与解析,已经生成router的链接地址

    本人采用的是假分模块(目录),通过命名空间来进行模块分组的,非官方分组,所以在router是都会加上 namespace 信息,你也可适当的参考: 前提: /** * 注册命名空间 */ $loade ...

  2. Global Alignment(全局比对)--从算法(Needleman-Wunsch)到python实现

    很早就知道有全局比对和局部比对这两种比对方法,都是用到的动态规划的思想,知道一些罚分矩阵的概念,但一直都没有机会搞透彻,一些算法的细节也不太清楚,也没有亲手编程实现. 现在由于项目需求,需要手动写一个 ...

  3. [你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理

    原文地址:http://kb.cnblogs.com/page/42318/ 系列文章导航: [你必须知道的.NET] 开篇有益 [你必须知道的.NET] 第一回:恩怨情仇:is和as [你必须知道的 ...

  4. 理论与实践中的 C# 内存模型

    转载自:https://msdn.microsoft.com/magazine/jj863136 这是该系列(包含两部分内容)的第一部分,这部分将以较长的篇幅介绍 C# 内存模型. 第一部分说明 C# ...

  5. [Tomcat] Tomcat远程调试

    如何用eclispe远程调试tomcat 关键步骤: 1)修改启动脚本startup.bat 复制startup.bat为startup-debug.bat,然后打开startup-debug.bat ...

  6. (09)odoo工作流

    --------------修订时间14:54 2016-09-18 星期日21:59 2016-06-12 星期日10:06 2016-02-24 星期三17:14 2016-01-29 星期五-- ...

  7. 第四周 技术随笔psp

    本周psp 类型 内容 开始时间 结束 打断时间 净时间 写随笔 Scrum会议 23:46 00:27 0 41分

  8. 如何设置一个严格30分钟过期的Session

    今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察 ...

  9. WebForm MapPageRoute 路由配置(转载)

    使用场景是:MVC 混合使用 WebForm,然后对 WebForm 进行路由配置 http://www.cnblogs.com/xishuai/archive/2015/02/26/web-form ...

  10. 位运算取第一个非0的位 r & (~(r-1))

    Single Number III Given an array of numbers nums, in which exactly two elements appear only once and ...