最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
javascript面向对象学习之一
时间:2014-03-26 编辑:简简单单 来源:一聚教程网
复习面向对象知识:
什么是包装对象?
基本类型都有自己对应的包装对象 String Number Boolean Array Data
字符串不是对象为什么会有方法呢?
解:方法都挂在包装对象的原型下面 var str=new String();
原型链
//原型链的最外层:Object.prototype
实例对象与原型之间的连接,叫做原型链 _proto_
function Aaa(){
this.num=20; //优先级高于原型下的num
}
Aaa.prototype.num=10;(通过原型链找到的Num)
Object.prototype.num=30;(最外层的,优先级最低)
var p1=new Aaa();
alert(p1.num); // 20;
—————————————————–
高级面向对象
面象对象的一些属性和方法
hasOwnProperty :看是不是对象自身下面的属性
var arr=[];
arr.num=10;
Array.prototype.num2=20;
alert(arr.hasOwnProperty(‘num’));//true;
alert(arr.hasOwnproperty(‘num2′)); // false;
constructor :查看对象的构造函数(可以用来判断是不是数组,及其它类型)
function Aaa(){}
var a1=new Aaa();
alert(a1.constructor);// Aaa这个构造函数 ( Aaa.prototype.constructor=Aaa; 程序自动生成这句话
)
判断是不是Array数组(在iframe情况下失效)
alert(arr.constructor==Array){ }
避免修改constructor 如下;
function Aaa(){}
1,第一种方法 www.111com.net
Aaa.prototype.name=”小明”; //向原型下添加方法不会修改constructor
2,第二种方法
Aaa.prototype={ //这里会覆盖constructor
constructor : Aaa, //这里需要指定下construtor(比较大的库都会指定下,如jquery)
name :”小明”
}
For in 找不到系统自带的属性
instanceof :对象与构造函数在原型上是否有关系(也可以用来判断数组 )
var arr=[];
alert( arr instanceof Array ); //true;可以用来判断是不是数组
function Aaa (){}
var a1=new Aaa();
alert(a1 instanceof Aaa ) // true;
alert(a1 instanceof Object ) // true;
toString(); 作用:把对象转成字符串;(系统对象下面都是自带的,自己写的对象都是通过原型链找Object下面的)
var num=255; alert(num.toString(16));//接收一个参数,转进制;(颜色rgba转换)
利用toString做类型的判断:
var arr=[];
alert( Object.prototype.toString.call(arr) );//[object Array]
判断一个变量是不是数组array的三种方法:
alert( Object.prototype.toString.call(arr)== ‘[object Array]‘ ); 最好的数组判断方法,推荐
alert(arr.constructor==Array)(在iframe情况下失效)
alert( arr instanceof Array ); (在iframe情况下失效)
封装
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类)。
那么,如果我们要把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象,我们应该怎么做呢?
一、 生成对象的原始模式 www.111com.net
假定我们把猫看成一个对象,它有"名字"和"颜色"两个属性。
var Cat = {
name : '',
color : ''
}
现在,我们需要根据这个原型对象的规格(schema),生成两个实例对象。
var cat1 = {}; // 创建一个空对象
cat1.name = "大毛"; // 按照原型对象的属性赋值
cat1.color = "黄色";
var cat2 = {};
cat2.name = "二毛";
cat2.color = "黑色";
好了,这就是最简单的封装了,把两个属性封装在一个对象里面。但是,这样的写法有两个缺点,一是如果多生成几个实例,写起来就非常麻烦;二是实例与原型之间,没有任何办法,可以看出有什么联系。
二、 原始模式的改进
我们可以写一个函数,解决代码重复的问题。
function Cat(name,color){
return {
name:name,
color:color
}
}
然后生成实例对象,就等于是在调用函数:
var cat1 = Cat("大毛","黄色");
var cat2 = Cat("二毛","黑色");
这种方法的问题依然是,cat1和cat2之间没有内在的联系,不能反映出它们是同一个原型对象的实例
-
上一个: js中parse()解析JSON的方法
-
下一个: js正则英文字母大小写转换例子
相关文章
- JavaScript面向对象继承基础讲解 04-05
- 原生 javascript 面向对象分析及思考 12-05
- JavaScript面向对象精要 09-30
- 深入理解Javascript中的面向对象 04-11
- JavaScript面向对象基础知识 03-25
- javascript面向对象之继承的笔记 03-19