Javascript基础--成员函数(六)
成员函数:也叫方法
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] +" ");
}
//使用Array提供的方法,颠倒数据。
arr.reverse();
document.writeln("<br/>");
for(var i=0;i<arr.length;i++){
document.writeln(arr[i] +" ");
}
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基础--成员函数(六)的更多相关文章
- (Frontend Newbie)JavaScript基础之函数
函数可以说是任何一门编程语言的核心概念.要能熟练掌握JavaScript,对于函数及其相关概念的学习是非常重要的一步.本篇从函数的基本知识.执行环境与作用域.闭包.this关键字等方面简单介绍Java ...
- JavaScript基础学习-函数及作用域
函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...
- JavaScript 基础回顾——函数
在JavaScript中,函数也是一种数据类型,属于 function 类型,所以使用Function关键字标识函数名.函数可以在大括号内编写代码并且被调用,作为其他函数的参数或者对象的属性值. 1. ...
- Javascript 基础--JS函数(三)
一.基本概念:未完成某一个功能的代码(语句,指令)的集合. 二.函数的调用方式: 2.1.函数名(传递参数1,传递参数2) 基本语法 function 函数名(参数列表){ //代码; retur ...
- javascript基础(五)函数
原文http://pij.robinqu.me/ 通过call和apply间接调用函数(改变this) call 和 apply带有多个参数,call和apply把当前函数的this指向第一个参数给定 ...
- javascript基础学习(六)
javascript之对象 学习要点: 对象的属性和方法 对象的原型 一.对象 对象其实就是一种引用类型,而对象的值就是引用对象的实例. 二.创建对象 在javascript中有两种对象,一种是系统内 ...
- javascript基础知识-函数
1.javascript中函数有两种定义方式: 函数语句定义和表达式定义 //函数有定义 function test(){ console.log("This is a function&q ...
- JavaScript基础——创建函数
JavaScript的最重要的一个部分是制作其他代码可以重用的代码.要做到这一点,你可以把代码组织成执行特定任务的函数.函数是结合在一个单一的块中,并给予一个名称的一系列代码语句.然后,你就可以通过引 ...
- JavaScript基础之函数与数组
函数 函数的基本概念 为完成某一功能的程序指令(语句)的集合,称为函数.有的程序员把函数称为方法,希望大家不要被这两个名词搞晕了. 函数分为:自定义函数.系统函数(经常查看js帮助手册). j ...
随机推荐
- Android 反编译apk 详解
测试环境: win 7 使用工具: CSDN上下载地址: apktool (资源文件获取) 下载 dex2jar(源码文件获取) 下载 jd-gui (源码查看) ...
- sql server 导出数据到 Azure Hbase / Hive 详细步骤
The Hadoop on Azure Sqoop Import Sample Tutorial Table of Contents Overview Goals Key technologi ...
- Spring Boot 环境变量读取 和 属性对象的绑定
网上看到的一些方法,结合我看到的 和我们现在使用的.整理成此文: 第一种方法 参见catoop的博客之 Spring Boot 环境变量读取 和 属性对象的绑定(尊重原创) 第二种方法 class不用 ...
- stackview
Stack View会被当成Container View.所以它是一个不会被渲染的UIView子类.它不像其他UIView子类一样,会被渲染到屏幕上.这也意味着设置其backgroundColor属性 ...
- SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束
创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...
- 记Judith此人和我对美国教育的感触
我因为及其糟糕的英语所以报读了一个英语学习班,Judith就是我的英语老师,同时我在家学习的大儿子也自然报读了这个学习班也是她的学生. 她很胖,典型的美国形象(哈哈,希望这样不会让她不快),之前在南京 ...
- 查看Linux软件信息
查看系统发型版本 1. 对于linux系统而已,有成百上千个发行版.对于发行版的版本号查看方法 如以centos为例.输入lsb_release -a即可 该命令适用于所有的linux,包括Redha ...
- 多线程相关Interlocked.Increment问题
今天群里有人问到如下代码打印出来的东西为什么不是连续得,所以有大神解释了原因.在这过程中遇到了些奇怪的情况 static void Main(string[] args) { for (int i = ...
- Objective-C(NSString、BOOL、多文件开发)
NSString 表示oc当中的字符串类 %@是oc当中对象的格式符 printf不能打印oc当中的对象 通过stringWithFormat:这个类方法,打印格式化的字符串 例 int a = 10 ...
- BZOJ4033 [HAOI2015]T1
令$f[p][i]$表示以$p$为根的子树内,选了$i$个黑点,剩下的都是白点的这个子树内贡献的答案 如果$p$的子树都算出来了,只要计算$p$与$fa[p]$之间的边对答案的贡献就好了,贡献是$di ...