Object类是所有JavaScript类的基类,提供了一种创建自定义对象的简单方式,不需要程序员再定义构造函数。

主要属性:

constructor-对象的构造函数

prototype-获得类的prototype对象,static性质

主要方法:

hasOwnProperty(property)-是否属于本类定义的属性

isPrototypeOf(object)-是否是指定类的prototype

propertyIsEnumerable(property)-是否可例举的属性

toString()-返回对象对应的字符串

valueOf()-返回对象对应的原始类型值

js中所有类的超类都是Object.

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

运行结果:

var i1=new Number(10);
var i2=10;
window.alert(i1.constructor);
window.alert(i2.constructor);

运行结果是一样的。

加深对类和对象的认识

如何给类添加方法(如何给某类型的所有对象添加方法)

代码:

//体验一下array

    var arr1=new Array(3);
arr1[0]="George";
arr1[1]="John";
arr1[2]="Thomas"; //遍历该数组
for(var i=0;i<arr1.length;i++){
document.writeln(arr1[i]+"&nbsp");
}
document.writeln("<br/>");
//使用Array提供的方法颠倒数据
arr1.reverse();
for(var i=0;i<arr1.length;i++){
document.writeln(arr1[i]+"&nbsp");
} //如何给所有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("下标为:"+arr1.find("Thomas"));

运行结果:

闭包

在讲封装时会提到。

成员函数的细节说明

①成员函数的参数可以是多个

function函数名(参数1,参数2,...)

例题:求三个数中的最大数

var a=window.prompt();
var b=window.prompt();
var c=window.prompt();
a=parseInt(a);
b=parseInt(b);
c=parseInt(c);
var temp=a;
if(a<b){
temp=b;
}
if(temp<c){
temp=c;
}
document.writeln("最大的数是:"+temp);

在键盘中输入三个数,然后把最大的数输出。这里不要忘记代码

a=parseInt(a);

②函数可以没有返回值但最多只能有一个返回值。

js中的函数还有以下两点特别说明一下

js支持参数个数可变的函数

js支持创建动态函数。

在js中没有重载的概念,这里写了两个貌似重载的函数,但是它不会报错,它只会让最后一个函数覆盖之前写的所有函数。

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

上述案例中,只有最后一个函数会生效,输出:23 undefined.

结论:js在调用一个函数的时候,是根据函数名来调用,如果有多个函数名相同,则人最后那个函数。

①js函数不支持重载

②直接定义一个函数或者变量实际上这些函数和变量就是全局函数和全局变量(本质上它们都是属于window对象的)

function abc(a,b){
return a+b;
}
function abc(a,b,c){
return a+b+c;
}
window.alert(abc(1,2));
window.alert(abc(1,2,3));

第一个打印出:NaN

第二个打印出:6

function abc(){
var res=0;
for(var i=0;i<arguments.length;i++){
res+=arguments[i];
}
return res;
} window.alert(abc(1,2));
window.alert(abc(7,8,9));

结果:3,24.

面向对象编程的综合案例

采用面向对象的思想设计超级马里奥游戏人物。

游戏的分析:

(1)如何通过案例来控制mario的位置

(2)设计相关的对象(Mario x,y...)

事件驱动机制:event.

基本代码:

要求 1.mario碰到边界给一个提示

2.mario可以找另外一个物体。

问题:

怎么直接获取css的内容

构造函数

基本用法

function 类名(参数列表){

  属性=参数值;

}

举例:

function Person(name,age){
this.name=name;
this.age=age;
} //创建Person对象的时候,就可以直接给名字,和年龄
var p1=new Person("abc",80);
window.alert(p1.name);
var p2=new Person("hello",9);
window.alert(p2.name);

构造函数是一种特殊的方法,

①构造函数(方法)和类名相同;

②在创建一个对象实例时,系统会自动地调用该类的构造方法完成对新对象的初始化。

特别注意:构造方法和普通方法在编写上是没有区别的,不一样的地方在于使用方式。

普通方法是直接调用,而构造方法是用来初始化对象的。如:var p=new Person("abc",90);

能否在创建一个对象实例的时候就给该对象实例指定成员方法呢?

通过将参数作为参数传递就可以完成。

在给一个对象初始化属性值的时候,也可以指定函数属性。

案例:

function jiSuan(num1,num2,oper){
if(oper=="+"){
return num1+num2;
}else if(oper=="-"){
return num1-num2;
}else if(oper=="*"){
return num1*num2;
}else{
return num1/num2;
}
} function Person(name,age,fun){
this.name=name;
this.age=age;
this.myfun=fun;
} var p1=new Person("aa",9,jiSuan);
window.alert(p1.name);
window.alert(p1.myfun(89,90,"+"));

③在创建对象实例时,系统自动调用该对象的构造方法。

ext js可以做什么?它的基础就是JavaScript。web开发最核心的就是JavaScript。

◆创建对象的又一种形式

如果一个对象比较简单,我们可以直接创建(可以指定普通属性和函数属性)。

var dog={name:'小狗',age:8};

var dog={name:"小狗",age:8};
window.alert(dog.name+" "+dog.age);
//这样写,dog的属性是天然公开的,而js中一般都是公开的
window.alert(dog.constructor);

运行结果:

扩展:

var dog={name:"小狗",
age:8,
fun1:function(){window.alert('hello');},
fun2:function(){window.alert('ok');}
};
dog.fun1();
dog.fun2();

运行后,将hello和ok输出。

有时,我们会看到这样一种调用方法

函数名.call(对象实例)

//这样调用,该函数的this就是这个对象实例(这个和java的反射有点像,call(()和invoke()比较像)。

var dog={name:'hello'};
function test(){
window.alert(this.name);
//this.name不要把this.给忘记了。
} test();//和window.test();是一样的。
//window.test();
test.call(dog);//<==>dog.test();
//确定调用者
var name="shunping";
test.call(window);

输出:shunping,hello,shunping.

for ...in

它在遍历数组的时候用过。

var dog={
name:'小明',
sayHello:function(a,b){window.alert("结果"+(a+b));}
};
for(var key in dog){
alert(dog[key]);
}

将'小明'和函数代码输出。

以下代码同理:

function Person(){
this.name="abc";
this.age=90;
this.abc=function(){
window.alert("hello!");
}
} var p=new Person();
for(var key in p){
document.writeln(p[key]+"<br/>");
}

可以将window和document的属性和方法输出:

document.writeln("******当前浏览器window对象有 属性和方法****<br/>");
for(var key in window){
document.writeln(key+":"+window[key]+"<br/>");
} document.writeln("******当前document对象有 属性和方法****<br/>");
for(var key in document){
document.writeln(key+":"+document[key]+"<br/>");
}

运行结果:

JavaScript--Object类的更多相关文章

  1. JavaScript引用类型之Object类

    ECMAScript中的Object类跟Java中的Object类相似,ECMAScript中的全部类都由这个类继承而来,Object类中的全部属性和方法都会出如今其他类中,所以理解Object类,就 ...

  2. JavaScript学习总结(十一)——Object类详解

    一.Object类介绍 Object类是所有JavaScript类的基类(父类),提供了一种创建自定义对象的简单方式,不再需要程序员定义构造函数. 二.Object类主要属性 1.constructo ...

  3. 详解javascript的类

    前言 生活有度,人生添寿. 原文地址:详解javascript的类 博主博客地址:Damonare的个人博客 Javascript从当初的一个"弹窗语言",一步步发展成为现在前后端 ...

  4. JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  5. Javascript定义类(class)的三种方法

    将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...

  6. [转]Javascript定义类的三种方法

    作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html 将近2 ...

  7. javascript 定义类(转载)

    Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门 ...

  8. javascript定义类和类的实现

    首先说说类,在一个类里我们会有以下的几个特征: 1. 公有方法 2. 私有方法 3. 属性 4. 私有变量 5. 析构函数 我们直接看一个例子: /***定义类***/ var Class = fun ...

  9. javascript创建类的6种方式

    javascript创建类的7种方式 一 使用字面量创建 1.1 示例 var obj={}; 1.2 使用场景 比较适用于临时构建一个对象,且不关注该对象的类型,只用于临时封装一次数据,且不适合代码 ...

  10. JavaScript一个类继承中实现

    JavaScript类是默认原型对象继承: var Person = function() { this.name = "people"; this.hello = functio ...

随机推荐

  1. 安装htop教程及坑

    安装htop的坑:1.上官网http://hisham.hm/htop/releases/下载最新的包2.解压缩:tar -zxvf htop-2.0.2.tar.gz;3.进入目标文件夹: cd h ...

  2. matlab-1

    1.size():获取矩阵的行数和列数 (1)s=size(A), 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数.(2)[r,c]=size(A),当 ...

  3. JavaScript中的ajax(二)

    一.Ajax概念Ajax是(Asynchronous JavaScript And XML)是异步的JavaScript和xml.也就是异步请求更新技术.Ajax是一种对现有技术的一种新的应用,不是一 ...

  4. SQL Server -使用表触发器记录表插入,更新,删除行数

    1.如何使用sql获取当前session用户名和机器名 Select CURRENT_USER,Host_name() 2.如何在表触发器中获取当前表名称 SELECT OBJECT_SCHEMA_N ...

  5. sealed,new,virtual,abstract与override关键字的区别?

    1. sealed——“断子绝孙” 密封类不能被继承.密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于方法或属性时,sealed修饰符必须始终与override一起使用. ...

  6. HDFS源码分析之LightWeightGSet

    LightWeightGSet是名字节点NameNode在内存中存储全部数据块信息的类BlocksMap需要的一个重要数据结构,它是一个占用较低内存的集合的实现,它使用一个数组array存储元素,使用 ...

  7. JAVA程序开发按位运算的记录

    忘记在哪里看到一个面试题:把int a,b的值互换,不能使用临时变量.刚开始完全懵逼,脑子里面全是浆糊,不知道如何下手.查看答案后猛地一惊,心想居然还有这种操作,真是叹为观止,真的感觉自己的基础是如此 ...

  8. onvif 开发之video streamer---onvif实现功能和经验

    目录(?)[-] 一产生onvif源码框架 从wsdl生成C头文件 从头文件生成源码框架 二创建soap运行环境 三RTSP视频对接 实现GetCapabilities命令 实现GetServices ...

  9. Linux - 命令行 管道(Pipelines) 具体解释

    命令行 管道(Pipelines) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24249529 管道操作符" ...

  10. Spring MVC获得HttpServletRequest

    以下代码是获得Spring MVC中的HttpServletRequest ServletRequestAttributes attr = (ServletRequestAttributes) Req ...