var p1=new Person(\宋江\p1.show();
document.write(\
输出:名字宋江
5050
给一个对象添加(指定)函数的几种方式
1. 通用常用方式:上面的函数,知道这种通用的方式即可 2.方式二: function Person(){ this.name=\ this.age=30; }
function show1(){
window.alert(\}
var p2 = new Person();
p2.abc=show1;//记住不要加括号
p2.abc(); //输出helloabc window.alert(p2.abc);会把函数打出来 3.方式三: function Person(){ this.name=\ this.age=30; }
var p3 = new Person(); p3.show=function show2(){
window.alert(\}
p3.show(); //输出helloabc
题1.
function Person(){ this.name=\this.age=30; }
function show1(){
window.alert(\
//是window调用的name就是window的name }
var p2 = new Person(); p2.show=show1;
show1();//注意思考会输出什么?提示谁调用它.this就代表谁 答案:name:空白(undefined) 题2.
function Person(){ this.name=\ this.age=30; }
var name=\
function show1(){
window.alert(\}
var p2 = new Person(); p2.show=show1; show1();
答案:name:abc2 4.方式四: 前几种方法有一个问题,那就是以上对象独占函数代码,这样如果对象过多,则会影响效率,js设计者,给我们提供了别一个方法,原型法:这样多个对象可以共享函数代码,代码如下:
function Dog(){ }
//使用prototype去绑定一个函数给shout Dog.prototype.shout=function(){ window.alert('小狗'); }
var dog1=new Dog(); dog1.shout();
var dog2 = new Dog(); dog2.shout();//ok
window.alert(dog1.shout==dog2.shout);//返回true,说明是共享的函数 //扩展
var dog3 = new Dog(); var dog4 = new Dog(); var dog5 = dog4;
window.alert(dog3==dog4);// false 不是同一个对象 window.alert(dog4==dog5);// true
对代码原理说明图:
补讲 == 号的作用
1. 当 == 的两边 都是字符串的时候,则比较内容 相等否。 2. 如 == 的两边 都是数字的时候,则数的大小是否相等。
3. 如 == 的两边 是对象或对象中的函数属性,则比较地址是否相等。
加深对类和对象的认识
如何给类添加方法(如何给某类型的所有对象添加方法) 案例1:
//初步体验Object类,通过Object直接创建对象 var p1 = new Object(); p1.name = \
window.alert(p1.name);
window.alert(p1.constructor);
案例2:
var i = new Number(10); //我们可以给类添加方法.
Number.prototype.add=function(a){ return this+a; }
window.alert(i.add(10).add(30)); var b= 90;
window.alert(b.add(40)); //输出50 130
请思考给js的Array对象扩展一个find(val)方法,当一个Array对象调用该方法时候,如果能找到val则返回其下标,否则返回-1; 案例:
//体验一下Array
var arr1=new Array(); arr1[0]=\arr1[1]=\arr1[2]=\//遍历数组
for(var i=0;i
//使用Array提供的方法来颠倒数据 arr1.reverse();
document.write(\for(var i=0;i
输出:s1 s2 s3
s3 s2 s1
//现在我们一起看看如何给所有Array对象添加一个方法find(val) Array.prototype.find=function(val){ //开始遍历数组this
for(var i=0;i } return -1; } document.write(\下标是\输出:下标1 闭包 这个知识点,在讲到封装的时候再说! 成员函数的细节 1成员函数的参数可以是多个 function 函数名(参数......){ } 2成员函数可以返回值,也可以没有,但是有的话,最多只有一个 function 函数名(参数列表){ 语句;//函数主体 return 返回值; } 3.js中不支持函数的重载,具体案例 function test(a,b){ window.alert(\} function test(a){ window.alert(a); } function test(a,b){ window.alert(a+\} test(23); //输出23 undefined window.test(3,\输出3 hello 结论:1.js在调用一个函数的时候,是根据函数名来调用的,如果有多个函数名相同,则 认最后那一个函数. 2.直接定义一个函数或者变量,实际上这些函数和变量就是全局函数和全局变量 (本质上他们是属于window对象的) ◆ 面向对象综合案例 游戏的分析: 1. 看看如何通过按钮来控制mario的位置 2. 设计相关的对象(Mario x, y......) 基本代码给大家: 要求:1. mario碰到边界给一个提示 2. mario 可以去找另外一个物体