JavaScript--Object类
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]+" ");
}
document.writeln("<br/>");
//使用Array提供的方法颠倒数据
arr1.reverse();
for(var i=0;i<arr1.length;i++){
document.writeln(arr1[i]+" ");
}
//如何给所有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类的更多相关文章
- JavaScript引用类型之Object类
ECMAScript中的Object类跟Java中的Object类相似,ECMAScript中的全部类都由这个类继承而来,Object类中的全部属性和方法都会出如今其他类中,所以理解Object类,就 ...
- JavaScript学习总结(十一)——Object类详解
一.Object类介绍 Object类是所有JavaScript类的基类(父类),提供了一种创建自定义对象的简单方式,不再需要程序员定义构造函数. 二.Object类主要属性 1.constructo ...
- 详解javascript的类
前言 生活有度,人生添寿. 原文地址:详解javascript的类 博主博客地址:Damonare的个人博客 Javascript从当初的一个"弹窗语言",一步步发展成为现在前后端 ...
- JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- Javascript定义类(class)的三种方法
将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...
- [转]Javascript定义类的三种方法
作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html 将近2 ...
- javascript 定义类(转载)
Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门 ...
- javascript定义类和类的实现
首先说说类,在一个类里我们会有以下的几个特征: 1. 公有方法 2. 私有方法 3. 属性 4. 私有变量 5. 析构函数 我们直接看一个例子: /***定义类***/ var Class = fun ...
- javascript创建类的6种方式
javascript创建类的7种方式 一 使用字面量创建 1.1 示例 var obj={}; 1.2 使用场景 比较适用于临时构建一个对象,且不关注该对象的类型,只用于临时封装一次数据,且不适合代码 ...
- JavaScript一个类继承中实现
JavaScript类是默认原型对象继承: var Person = function() { this.name = "people"; this.hello = functio ...
随机推荐
- 【VBS】检索Outlook本地邮箱
实现功能:使用VBS检索Outlook本地邮箱中,今天是否收到某标题的邮件. 代码如下: ' yyyy-m-d 0:00 AM ' yyyy-m-d 11:59 PM Function CheckMa ...
- 手把手教你画AndroidK线分时图及指标
先废话一下:来到公司之前.项目是由外包公司做的,面试初,没有接触过分时图k线这块,认为好难,我能搞定不.可是一段时间之后,发现之前做的那是一片稀烂,可是这货是主功能啊.迟早的自己操刀,痛下决心,开搞, ...
- InnoDB Insert(插入)操作(下)--mysql技术内幕
接上一篇文章,最后做的那个实验,我是想证明mysql innodb存储引擎,commit操作与flush数据到磁盘之间的关系,当与同事交流之后,他说,你应该把innodb_buffer_size的大小 ...
- TCP/IP详解 卷一(第一章 概述)
很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们相互进行通信. 1.分层 TCP/IP不是一个协议,而是一个协议族,通常它被认为是一个四层的协议系统,下面展 ...
- Jquery.ajax报parseerror Invalid JSON错误的原因和解决方法:不能解析
(默认: 自动判断 (xml 或 html)) 请求失败时调用时间.参数有以下三个:XMLHttpRequest 对象.错误信息.(可选)捕获的错误对象.如果发生了错误,错误信息(第二个参数)除了得到 ...
- bottle的几个小坑
距离我在<web.py应用工具库:webpyext>里说要换用bottle,已经过去快两个月了--事实上在那之前我已经開始着手在换了.眼下那个用于 Backbone.js 介绍的样例程序已 ...
- java与javax有什么区别?
http://zhidao.baidu.com/question/8702158.html java和javax都是Java的API包,java是核心包,javax的x是extension的意思,也就 ...
- BigDecimal的String类型
java本身对浮点型的计算会丢失精度,这个一定要注意,必须要用BigDecimal的String类型才能解决精度的问题. BigDecimal一共有四个构造方法: 我们在计算商品价格的时候,一定要用B ...
- 对‘TIFFReadDirectory@LIBTIFF_4.0’未定义的引用-------------- 解决办法
ABLE_DEPRECATED' is defined [-Winvalid-pch] //usr/lib/libvtkIO.so.5.10:对‘TIFFReadDirectory@LIBTIFF_4 ...
- 深入浅出Attribute (一)
正文: 什么是Attribute?Attribute是干什么使的?Attribute与Property到底有什么区别?…… 长久以来,这些问题一直困扰着并不怎么广大的C#初学者.原因大概有两个,一是A ...