js的一些学习笔记2
来源:互联网 发布:阿里先锋软件 编辑:程序博客网 时间:2024/05/15 04:41
js面向(基于)对象编程
1.js面向对象编程:类与对象:
javascript中没有class,但是它取了一个新名字叫原型对象,相当于Java中类的概念,所以有时候称为类也可以。
例子:
//定义一个cat 类。function cat(){}var cat1 =new cat();//创建该类cat1.name="jack";cat1.color="black";cat1.age=3;//js中的对象属性可以动态增加//属性没有限制
创建对象的方式:
a.使用构造函数来定义类;
b.使用prototype;
c.使用new object创建对象并添加相关属性
d.构造函数及原型混合方式;
e.动态原型的方式;
先使用使用构造函数来定义类,然后再创建对象实例
基本语法:
function 类名 (){
}
创建对象:
var 对象名 =new 类名 ();
如何判断一个类是否为已知类:
function a(){}var a1 =new a();window.alert(a1.constructor);window.alert(typeof a1);if(a1 instanceof a){window.alert("a1 is a ok1");}if(a1.constructor==a){window.alert("a1 is a ok2");}
通过一个例子来说明变量带var 和不带var 的区别:
var abc =89;function test(){abc = 900;}test();window.alert(abc);
(1).普通方式:
对象名.属性名
(2)动态访问:
对象名["属性名"];
一个例子:
function Person(){}var p1 = new Person();p1.name = "abc";window.alert(p1.name);window.alert(p1["name"]);
js引擎(在浏览器中)管理内存,通过一张表来管理内存:
堆地址引用次数0x123420x23540
把引用次数为0的内存空间给回收;
或者用delete主动直接删除某个对象的属性: delete 对象名.属性( delete a.age)
4.this
this 的提出:
当我们创建某些对象的时候,希望对象自动拥有某些属性,这时使用this可以解决这个问题
function Person(){this.age=10;//这个属性是公有的this.name="abc";//公有属性}var a= new Person();var b= new Person();b.name="cde";window.alert(a.name+" "+b.name);
在定义初始变量的时候,不能出现以下的方式:
function Person(){var age=10;//这个属性是私有的var name="abc";//这个属性是私有的}var a= new Person();var b= new Person();b.name="cde";window.alert(a.name+" "+b.name);
可以通过this 构成一个共有的方法来访问私有的变量,如以下的例子:
function Person(){var age=10;var name="abc";this.show=function(){//这是Person类的一个公开的方法,用来访问私有属性window.alert(age+" "+name);}function show2(){//这是Person类的一个私有方法,只能在Person内部使用window.alert("show2()"+name+age);}}var a= new Person();a.show();
this的另一个例子:
function test1(){alert(this.v);}var v=9;test1();//或使用window.test1(); 不给出对象的默认是window对象
输出结果为 9;谁调用带有this的函数,就可以把它替换this
5.构造函数,成员函数:
给一个对象指定函数的方法:
①:
function Person(){//传入的实际参数,达到初始化属性的作用this.name= "kevin" ;this.age = 90;this.show=function(){//输出自己的名字, 这里的this.show 是一个公开的函数,函数名是showwindow.alert("名字"+this.name+this.age);}}var p1 = new Person();p1.show();
②:
function Person(){//传入的实际参数,达到初始化属性的作用this.name= "kevin" ;this.age = 90;}function show(){window.alert("hello"+this.name);}var p1 = new Person();p1.kevin = show;// 把show这个函数指向Kevin中文属性p1.kevin();
③:
function Person(){//传入的实际参数,达到初始化属性的作用this.name= "kevin" ;this.age = 90;}var p1 = new Person();p1.kevin = function show(){window.alert("hello"+this.name);}p1.kevin();
其实这三个方法本质上是一样的,但在使用这些方法的时候,每个对象所具有的属性是不共享的,即创建每个对象的时候都会产生每一部分的代码,若要共享一部分代码则可以用prototype,如:
function Dog(){}Dog.prototype.shout=function(){//使用prototype类去绑定一个函数给shout这个属性window.alert("ok");}var dog1 = new Dog();dog1.shout();var dog2 = new Dog();dog2.shout();
如果要判断两个对象或函数的地址是否相同,可以通过 == 进行判断.
成员函数的细节:
1.成员函数的参数可以是多个的
function 函数名 (参数1,参数2,...){
...
}
2.成员函数可以有返回值,也可以没有,有的话只能有一个
3.js 中没有函数重载这个概念,即在以相同和名字命名两个函数时,最后一个函数的函数体会覆盖之前所有函数体:
function test(a){window.alert(a);}function test(a,b){window.alert(a+" "+b);}//这个函数是全局函数,属于window 类test(10); //输出 10 undefined test(10,20);//输出 10 20
0 0
- js的一些学习笔记2
- 学习js的一些笔记
- 学习js的一些小笔记。。。
- js的一些学习笔记1
- JS的一些笔记
- JS的一些笔记
- js学习笔记之数组Array的一些特性
- js的一些使用笔记
- 学习笔记2---html的一些标签
- 我的一些学习笔记
- 原来的一些学习笔记
- 学习C#的一些笔记
- shell的一些学习笔记
- 一些ffmpeg的学习笔记
- 【转】学习的一些笔记
- C#的一些学习笔记
- oracle的一些学习笔记
- Python的一些学习笔记
- 【郑轻】[1765]Lay a pancake!!!
- STL迭代器失效问题
- hdu 1026 Ignatius and the Princess I【bfs+路径打印】经典题目
- uva 11387——The 3-Regular Graph
- SPI (Service Provider Interface)
- js的一些学习笔记2
- idea15激活教程
- 实战c++中的vector系列--vector的遍历(stl算法、vector迭代器(不要在循环中判断不等于end())、operator[])
- avalon 学习资料
- 地图sd文件发布教程 Arcgis
- 简单的C程序<一>:字符间空格处理
- C语言总结
- 指向函数的指针—基本概念
- linux值wget命令详解