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. Android 百度地图开发(二)

    这一篇文章主要解说的是百度地图的定位功能,然后还有MyLocationOverlay和PopupOverlay两个地图覆盖物的使用.Overlay是"图层"或"覆盖物&q ...

  2. jquery方法

    $.inArray(被判断的量,ArrayName);  如果存在返回索引值,如果不存在返回-1 $.unique() 数组去重   根据去重前后的长度,判断是否有重复 $.each(被遍历的数组,f ...

  3. 六种基本DCDC变换器拓扑结构

    1.SEPIC电路 2.

  4. 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。

    // 第一种方法 // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include < ...

  5. spring整合hibernate,在获取sessionFactory的时候报错,求解决办法!!

    applicationContext.xml文件 <!-- 开启扫包 --> <context:component-scan base-package="cn.edu&qu ...

  6. 【Scala】Scala的Predef对象

    隐式引用(Implicit Import) Scala会自己主动为每一个程序加上几个隐式引用,就像Java程序会自己主动加上java.lang包一样. Scala中.下面三个包的内容会隐式引用到每一个 ...

  7. 【BZOJ1499】[NOI2005]瑰丽华尔兹 单调队列+DP

    [BZOJ1499][NOI2005]瑰丽华尔兹 Description 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是 ...

  8. 【BZOJ2229】[Zjoi2011]最小割 最小割树

    [BZOJ2229][Zjoi2011]最小割 Description 小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有 ...

  9. Python:list、dict、string

    <<List>>列表 [python] view plaincopy 创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 samp ...

  10. OpenFileDialog对话框Filter属性(转)

    OpenFileDialog对话框的Filter属性说明: 首先说明一个示例,分析一下Filter属性的构成:“ Excel文件|*.xls ”,前面的“Excel文件”成为标签,是一个可读的字符串, ...