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. C 语言字符串连接的 3种方式

    C 语言字符串连接的 3种方式 #include<stdio.h> #include<stdlib.h> #include<string.h> char *join ...

  2. iOS响应式编程:ReactiveCocoa vs RxSwift 选谁好

    转载: iOS响应式编程:ReactiveCocoa vs RxSwift 选谁好 内容来自stack overflow的一个回答:ReactiveCocoa vs RxSwift – pros an ...

  3. 我常用的Webstorm快捷键

    ctrl+b 跳转到方法内部 meta:vp + tab 生成移动端 ctrl + alt + l 整理代码 ctrl + shift + up/down 行移动 ctrl + shift + ent ...

  4. python常见的模块

    Python内置模块名称 功能简介 详细解释/使用示例 os 和操作系统相关 os.path — Common pathname manipulations sys 和系统相关 sys — Syste ...

  5. jquery 设置css样式

       $("#61dh a").css('color', 多个样式属性 var divcss = { background: '#EEE', width: '478px', mar ...

  6. hashtable 实现

    #include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct _hashnod ...

  7. OpenGL基础图形编程

    一.OpenGL与3D图形世界1.1.OpenGL使人们进入三维图形世界 我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体.我们又生活在一个充 ...

  8. @media用法。

    @media版本:CSS2  兼容性:IE5+   语法:    @media  sMedia { sRules }    说明:    sMedia :  指定设备名称.请参阅附录:设备类型  sR ...

  9. 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 ...

  10. php header setcookie headers_sent函数 函数检查 HTTP 标头是否已被发送以及在哪里被发送

    这里需要注意的 header() 最常被拿來送 header('Location: /'); 等等, 做网页重定向的动作. 在使用 setcookie(), header()... 等函数前 不可以用 ...