成员函数:也叫方法

1.常用方法

比如:我们希望对象不但有属性,还希望他有行为。(行为在程序中要靠函数来体现)
(1) 添加speak函数,输出我是一个好人
(2) 添加jisuan函数,可以计算从1+..+1000的结果
(3) 修改jisuan函数,该方法可以接收一个数n,计算从1+..+n的结果
(4) 添加add成员函数,可以计算两个数的和

 function Person(name,age){
//这个就是使用传入的实际参数,去初始化属性。
this.name = name;
this.age = age
//输出自己的名字,这里 this.show 就是一个公开的函数,函数名是show
this.show = function(){
document.writeln("名字=" + this.name);
} //添加jisuan函数,可以计算从1+..+1000的结果
this.jisuan = function(){
var res = 0;
for(var i=0;i<1000;i++)
{
res+=i;
}
return res;
} //修改jisuan函数,该方法可以接收一个数n,计算从1+..+n的结果
this.jisuans = function(n){
var res = 0;
for(var i=0;i<=n;i++)
{
res+=i;
}
return res;
}
} var p1 = new Person("宋江",90);
p1.show();
var p2 = new Person("林冲",72);
p2.show();
document.writeln("<br/> res=" + p1.jisuan());
document.writeln("<br/> res=" + p1.jisuans(100));

2.给对象添加方法还有其它三种方式:
  2.1 方式一
  function 类名()
  {
  this.属性;
  }

  var 对象名 = new 类名();
  function 函数名(){
  //执行
  }

  对象名.属性名 = 函数名;//这样就相当于把函数赋给 对象名.属性名,此时这个属性 对象

  名.属性名就表示一个函数。

  对象名.属性名();

  具体案例:

 function Person(){
this.name = "abc";
this.age =900;
}
function show1(){
window.alert("hello" + this.name);
} //创建一个p1对象
var p1 = new Person();
//把show1函数,给p1.abc
p1.abc = show1; //如果是这样写:p1.abc = show1(),会把show1()的计算结果返回给p1.abc,当前要调用show1(),则返回undefine给p1.abc
p1.abc();//调用 注意:
window.alert(p1.abc); //会输出什么
window.alert(show1) //会输出什么

p1.abc和show1 输出的都是上图show1的构造函数

  2.2 方式二
  对象名.属性名 = function(参数列表){
    //代码
  };
  调用
  对象名.属性名(实际参数);

  具体案例:

  

  function Person(){
this.name = "abc";
this.age = 900;
}
var p1 = new Person();
p1.abc = function show1(){
window.alert("hello" + this.name);
};
p1.abc();

  2.3 方式三:
  前面的几种方法有一个问题,那就每个对象独占函数代码,这样如果对象很多,则会影响效率

  ,js的设计者,给我们提供另一个方法 原型法:这样多个对象可以共享函数代码:

    function Dog(){
}
//使用prototype[类]去绑定一个函数给shout
Dog.prototype.shout = function(){
window.alert('小狗');
}
var dog1 = new Dog();
dog1.shout();
var dog2 = new Dog();
dog2.shout(); //这里ok

  对代码的原理说明

  

   //判断dog1和dog2的方法是否调用同一个内存地址的方法
window.alert(dog1.shout == dog2.shout);

  

  =号的作用
  (1) 当 == 的两边都是字符串,则比较内容是否相等
  (2) 当 == 的两边都是数字,则比较数的大小是否相等
  (3) 当 == 是对象 或者是 对象函数,则比较地址是否相等

  2.4 案例分析
  分析能输出什么?
  案例一:

 function Person(){
this.name = "abc1";
this.age = 900;
} function show1(){
window.alert("hello" + this.name); //这里的this 是表示window 对象,没有给window.name 赋值,输出的时候只输出hello。
}
var p1 =new Person();
p1.abc = show1;
show1();

案例二:

 function Person(){
this.name = "abc1";
this.age = 900;
} var name = "北京"; // 这句话等同于window.name = "北京"function show1(){
window.alert("hello" + this.name); //这里的this 是表示window 对象
}
var p1 = new Person();
p1.abc = show1;
window.show1(); //下面跟案例二没有关系
function Person(){
this.name ="abc";
this.age =900;
this.abc = function(v1,v2){
window.alert(this.name + " " + this.age +" "+v1+" "+v2);
}
}
var p1 = new Person();
p1.abc();
p1.abc("北京","天津");
var p2 = new Person();
p2.abc();
p2.abc("南京","东京"); function Person(){
this.name = "abc";
this.age = 900;
this.abc = function(v1,v2){
window.alert(this.name + " " + this.age +" " +v1+" " +v2);
}
} var p1 = new Person();
p1.name = "中国"; //动态添加一个属性
p1.abc("北京","天津");
var p2 = new Person();
p2.abc("南京","东京");

每次new一个类的实例后,都会创建两个公共属性name,age和一个公共方法abc(),而不是共享

 function Dog(){
} var dog1 = new Dog();
//动态绑定一个函数给shout属性
dog1.shout = function(){
window.alert('小狗');
} dog1.shout(); var dog2 = new Dog();
dog2.shout();//这里报错 //希望所有的对象,共享某个函数

解决方案:

function Dog(){

   }
//使用prototype[类]去绑定一个函数给shout
Dog.prototype.shout = function(){
window.alert('小狗');
}
var dog1 = new Dog();
dog1.shout();
var dog2 = new Dog();
dog2.shout(); //这里ok
   //判断dog1和dog2的方法是否调用同一个内存地址的方法
window.alert(dog1.shout == dog2.shout); //扩展 var dog3 = new Dog();
var dog4 = new Dog();
var dog5 = dog4;
window.alert("dog3==dog4" +(dog3==dog4)); //判断对象是否为同一个对象
window.alert("dog5==dog4" +(dog4==dog5)); //判断对象是否为同一个对象

3、Object 类

  3.1 创建Person实例

/*function Person(){

   }
var p1 = new Person();
p1.name ="sp";*/ //初步体验Object类,通过Object直接创建对象。
var p1 = new Object();
p1.name="sp";
window.alert(p1.constructor);
   var i1= new Number(10);
window.alert(i1.constructor);

var i2 =10;
window.alert(i2.constructor);
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)); var arr = new Array(3);
arr[0] = "George";
arr[1] = "John";
arr[2] = "Thomas"; for(var i=0;i<arr.length;i++){
document.writeln(arr[i] +"&nbsp;");
}
//使用Array提供的方法,颠倒数据。
arr.reverse();
document.writeln("<br/>");
for(var i=0;i<arr.length;i++){
document.writeln(arr[i] +"&nbsp;");
}

  

  

  3.2 加深对类和对象的认识
  如何给类添加方法(如何给某类型的所有对象添加方法) 

   /*
请思考给js的Array对象扩展一个find(val)方法,
当一个Array对象调用该方法的时候,如果能找到val则返回其下标,否则返回-1
*/ var arr = new Array(3);
arr[0] = "George";
arr[1] = "John";
arr[2] = "Thomas";
//现在我们一起看看如何给所有Array对象添加一个方法find(val);
Array.prototype.find = function(val){
//遍历数组 this
for(var i=0;i<this.length;i++){
if(val == this[i]{
return i;
}
}
return -1;
} document.writeln("John 下标 =" +arr.find("John"));

  3.3 成员函数-细节
    3.3.1 成员函数的参数可以是多个
    比如:function 函数名(参数1...){}
    3.3.2 成员函数可以有返回值,也可以没有,但是有的话,最大只能有一个
    3.3.3 js中不支持函数的重载,具体案例如下:

     function test(a,b,c){
window.alert("hello");
} function test (a){
window.alert(a);
}

//三个同名的函数,后面的函数会覆盖前面的函数,js中没有重载的概念,只会执行下面标红的函数
function test(a,b){
10 window.alert(a + "" + b);
11 }
//test(23);
window.test(3,"hello");
//结论:js在调用一个函数的时候,是根据函数名来调用。如果有个多个函数名相同,则认最后那个函数。 function abc(){
var s=0;
for(var i=0;i<arguments.length;i++){
s+=arguments[i]; //arguments[i]的下标是从1开始的,而不是0
}
return s;
}
window.alert(abc(1,2));
window.alert(abc(7,8,9));

      


 

Javascript基础--成员函数(六)的更多相关文章

  1. (Frontend Newbie)JavaScript基础之函数

    函数可以说是任何一门编程语言的核心概念.要能熟练掌握JavaScript,对于函数及其相关概念的学习是非常重要的一步.本篇从函数的基本知识.执行环境与作用域.闭包.this关键字等方面简单介绍Java ...

  2. JavaScript基础学习-函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...

  3. JavaScript 基础回顾——函数

    在JavaScript中,函数也是一种数据类型,属于 function 类型,所以使用Function关键字标识函数名.函数可以在大括号内编写代码并且被调用,作为其他函数的参数或者对象的属性值. 1. ...

  4. Javascript 基础--JS函数(三)

    一.基本概念:未完成某一个功能的代码(语句,指令)的集合. 二.函数的调用方式: 2.1.函数名(传递参数1,传递参数2)   基本语法 function 函数名(参数列表){ //代码; retur ...

  5. javascript基础(五)函数

    原文http://pij.robinqu.me/ 通过call和apply间接调用函数(改变this) call 和 apply带有多个参数,call和apply把当前函数的this指向第一个参数给定 ...

  6. javascript基础学习(六)

    javascript之对象 学习要点: 对象的属性和方法 对象的原型 一.对象 对象其实就是一种引用类型,而对象的值就是引用对象的实例. 二.创建对象 在javascript中有两种对象,一种是系统内 ...

  7. javascript基础知识-函数

    1.javascript中函数有两种定义方式: 函数语句定义和表达式定义 //函数有定义 function test(){ console.log("This is a function&q ...

  8. JavaScript基础——创建函数

    JavaScript的最重要的一个部分是制作其他代码可以重用的代码.要做到这一点,你可以把代码组织成执行特定任务的函数.函数是结合在一个单一的块中,并给予一个名称的一系列代码语句.然后,你就可以通过引 ...

  9. JavaScript基础之函数与数组

     函数    函数的基本概念 为完成某一功能的程序指令(语句)的集合,称为函数.有的程序员把函数称为方法,希望大家不要被这两个名词搞晕了. 函数分为:自定义函数.系统函数(经常查看js帮助手册). j ...

随机推荐

  1. LinuxShell脚本攻略--第九章 管理重任

    收集进程信息 $ ps PID TTY TIME CMD pts/ :: bash pts/ :: ps$ ps -f  #-f 显示更详细的信息UID PID PPID C STIME TTY TI ...

  2. libsvm-3.21使用文档

    Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. (可用于分 ...

  3. 双心ping GUI工具1.0

    双心ping GUI工具1.0该软件利用WindowsAPI提供了图形界面的ping程序,同时还可以调用DOS下的ping命令.ping成功后自动加入网址列表框及同目录下的列表文件Pinglist.i ...

  4. iOS 使用Keychain 保存 用户名和密码到 本地

    iOS 使用Keychain 保存 用户名和密码到 本地 之前曾把一些简单的数据保存在了plist,文件,及NsuserDefault里面, 但是如果要保存密码之类的,保存在本地就很不安全了: 但是利 ...

  5. libuv里的几个缺陷

    libuv是node.js使用的基础库,主要包括主循环,文件和网络接口.虽然libuv是为node.js而生的,但它本身是一个独立的库,加上使用简单方便,所以在node.js之外也有不少人使用.最近整 ...

  6. Unity3D中目标相对自身的前后左右方位判断

    http://blog.csdn.net/cen616899547/article/details/38336185 在做rpg类游戏的过程中,经常遇到要判断周围怪物相对自身的方位   1.判断目标在 ...

  7. hibernate4.3.10使用注解映射方式样例

    1.调用例子 import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.boot.re ...

  8. VBA中find的一些使用方法

    用excel处理数据的时候,无论是使用VBA还是函数,查找和引用都是两大主要的工作,VBA中的find系列的方法(find.findnext.Range.FindPrevious)返回range对象, ...

  9. MySQL 加锁处理分析

    1    背景    1 1.1    MVCC:Snapshot Read vs Current Read    2 1.2    Cluster Index:聚簇索引    3 1.3    2P ...

  10. HTML5自学笔记[ 10 ]简单的购物车拖拽

    用html5拖拽功能实现了一个简单的购物车,样式简陋,得学学画画提高下审美了T^T: <!doctype html> <html> <head> <meta ...