韩顺平JS笔记完整版 - 图文(5)

2019-06-02 12:49

JS面向(基于)对象编程

1. 澄清概念

JS中基于对象等同于面向对象

JS中没有class,但是有新的名字叫做原型对象,因此类等同于原型对象 2. 为什么需要面向对象

入门案例:

/*张老太太养了两只猫猫:一只名字叫小白,今年3岁,白色。 还有一只叫小花,今年10岁,花色。请编写一个程序,当用户 输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用 户输入的小猫名字错误,则显示张老太太没有这只猫。 */

//这里就是一个Cat类 function Cat(){ }

var cat1=new Cat();//这时cat1就是一个对象 cat1.name=\小白\cat1.age=3;

cat1.color=\白色\

//从上面的代码我们可以看出

//1.JS中的对象的属性可以动态的添加 //2.属性没有限制

window.alert(cat1.name);输出小白

类(原型对象)和对象的区别和联系 1) 类是抽象的概念,代表一类事物 2) 对象是具体的,代表一类实体

3) 对象是以类(原型对象)为模板创建起来的

创建对象的方式有5种

1) 工厂方法—使用new Object创建对象并添加相关属性 2) 使用构造函数来定义类(原型对象) 3) 使用prototype

4) 构造函数及原型混合方式 5) 动态原型方式

方法选择:使用构造函数来定义类(原型对象),然后再创建实例

基本语法:

function 类名/原型对象名(){ }

创建对象:var 对象名=new 类名(); 在对象中我们特别说明: 1) JS中一切都是对象

function Person(){}

window.alert(Person.constructor); var a=new Person();

window.alert(a.constructor);//对象实例的构造函数 window.alert(typeof a);//a的类型是什么 var b=123;

window.alert(b.constructor); 输出:

如何判断一个对象实例是不是某个类型 方法1:

if(a instanceof Person){

window.alert(\是Person\}

方法2:

if(a.constructor==Person){ window.alert(\是Person\}

补充说明:带var和不带var的区别 var abc=89;//全局变量 function test(){ abc=900; }

test();

window.alert(abc); //输出900,var abc=900;则输出89

访问对象的属性的方法:2种 1) 普通方式:对象名.属性名 2) 动态访问:对象名[“属性名”] 案例:

1.function Person(){} var p1=new Person(); p1.name=\姜爽\

window.alert(p1.name); var val=\

window.alert(p1[\window.alert(p1[val]);

对象的引用问题说明: 2.function Person(){} var a=new Person(); a.age=10;

a.name=\小明\var b=a;

b.name=\小白\

window.alert(b.age+\名字\名字\输出:10名字小白名字小白 对象回收的机制: GC

JS引擎(浏览器的部分)有一张表

堆地址 引用的次数

0x1234 2 b=null 1

a=null ->0

JS提供一种方式主动释放内存

delete a.age;//用于删除属性 指向同一个地方,一个删了b就访问不到了 这样就会立即释放对象的属性空间

this讲解: 问题的提出:

function Person(){}; var p1=new Person(); p1.name = \老韩\p1.age = 30;

window.alert(p1.name+\var p2 = new Person(); window.alert(p2.name);

这里我们可以看到 window.alert(p2.name)会输出 undefined

在实际编程中,我们可能有这样的需求,当我们创建一个对象后,就希望该对象自动的拥有某些属性

[比如:当我们创建一个Person对象后,就希望该对象自动拥有name和age属性,这又怎么办?

使用this 来解决 function Person(){ this.name=\ this.age=30; }

var p1 = new Person(); var p2 = new Person();

window.alert(p1.name+\

◇可能有人会这样去思考问题 //***有些同学可能会这么想: function Person(){

var name=\如果这样去使用name这个属性是私有的 var age=30;

this.name2=\表示name2这个属性是公开的 }

var p1=new Person();

window.alert(p1.name+\错误

这样使用会报 undefined,私有的外部访问不到

function Person(){

var name=\私有的,只能在内部使用 var age=30;//私有的,只能在内部使用

this.name2=\表示name2这个属性是公开的

this.show=function (){//函数 这就是Person类里面的一个公开的方法 window.alert(\}

function show2(){//这就是Person类里面的一个私有的方法,只能在类内部使用, //如要一定要使用,只能通过公开方法(特权方法)来调用私有方法来实现 window.alert(\ } }

var p1=new Person(); p1.show();

//p1.show2();//这里会报错

//window.alert(p1.name+\错误的

记住一句话:

哪个对象实例调用this所有的函数,那么this就代表哪个对象实例 function test1(){ alert(this.v); }

var v=90;

window.test1();//等价于test1() window调用test1(),所以this就代表window 输出90

this注意事项:

this不能放在类的外部使用,否则调用就变成window调用了

对象---成员函数(方法)

比如我们希望对象不但有属性,还需要他有行为,行为在程序中要靠函数来体现。 function Person(name,age){

//使用传递的实际参数去初始化属性 this.name=name; this.age=age;

//输出自己的名字,这里this.show就是一个公开的函数,函数名字是show this.show=function(){

document.write(\名字\}

//添加计算函数,可以计算从1+....+100的结果 this.jisuan=function(n){ var res=0;

for(var i=1;i<=n;i++){ res+=i; }

return res; } }


韩顺平JS笔记完整版 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2005级轻稀贵金属冶金学(B) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: