您的位置:首页 > Web前端 > JavaScript

面向对象的JS(一)

2015-11-17 11:27 609 查看
JavaScript是弱类型,可变性强
/*JavaScript和其他的语言类似,也是面向对象,自然也就是存在类和对象(对象是类的实例化)*/
//1、JS对象
var empty = {};    //没有任何属性的对象
var point = { x: 0, y: 0 };      //两个属性和值
var point2 = { x: point.x, y: point.y }    //复杂的属性和值
var book = {
"main title": "javascript",            //属性名字中有空格,必须用字符串表示
"sub-title": "The Definitive Guide",   //属性名字里有连字符,必须用字符串表示
"for": "all audiences",                //for是保留字,因此必须用引号
author: {                              //属性为对象类似其他语言
firstname: "David",                //这个属性的值是一个对象,因此属性没有使用引号
surname: "Flanagan"
}
};

//2、通过new创建对象
var o = new Object();                     //创建空对象,和{}一样
var a = new Array();                      //创建一个空数组,和[]一样,这里的数组对象是JavaScript自带的对象
var d = new Date();                       //创建时间对象
var p = new point();                      //创建自己定义的对象

//3、属性的查询和设置(可以通过“.”和“[]”来获取属性值,前者右侧必须是属性名称,后者括号内必须是一个字符串表达式)
var author = book.author;
var name = author.surname;
var title = book["main title"];

book.edition = 6;                         //给book创建一个名为“edition”的属性
book["main title"] = "ECMAScript";        //给“main title”重新赋属性值

//4、继承(JavaScript对象具有“自有属性”,也有些是从原型对象继承而来的,构成一条“链”)inherit()函数,通过给它传入指定原对象来创建实例
var o = {};   //或者var o=new Object();
o.x = 1;
var p = inherit(o);     //p继承o和object
p.y = 2;
var q = inherit(p);     //q继承o、p和object
q.z = 3;
var s = q.toString();    //toString继承object
var result = q.x + q.y;
alert(result);           //result为3 ,x和y继承o和p

//注意:属性赋值,但是不会修改原型链,设置属性和继承无关
var circle = { r: 1 };      //设置圆形半径r为1
var c = inherit(circle);    //c继承r
c.x = 1;
c.y = 1;
c.r = 2;
var l = circle.r;
alert(l);                   //l为1,原型对象属性没有修改


//5、删除属性(delete运算符可以删除对象的属性,只能删除自有属性,不能删除继承属性)
delete book.author;         //book不再有属性author
delete book["main title"];    //book也不再有属性“main title”

var o = { x: 1 };
delete o.x;
delete o.x;                  //此时返回true
delete o.toString;           //返回true
delete 1;                    //无意义,返回true

delete Object.prototype;      //不能删除,是不可配置的属性
var x = 1;
delete this.x;                 //不能删除这个属性
function f() { };              //声明一个局部函数
delete this.f;                //也不能删除

this.x = 1;                 //创建一个可配置全局属性(没有用var)
delete x;                    //可以删除

delete x;                   //直接报错,不能直接这样操作
delete this.x;              //正常运行

//6、检测属性
var o = { x: 1 };          //创建一个对象
o.hasOwnProperty("x");      //true
o.hasOwnProperty("y");      //false
o.hasOwnProperty("toString");    //false继承属性

//7、对象的三个属性(原型属性、类属性、可扩展属性)
//原型属性
var p = { x: 1 };                  //定义一个原型对象
var o = Object.create(p);          //使用这个原型创建一个对象
p.isPrototypeOf(o);                //true  o继承p
Object.prototype.isPrototypeOf(o);  //true p继承object.prototype

//类属性
function classof(o)
{
if (o === null) return "Null";
if (o===undefined) {
return "Undefined";
}
return Object.prototype.toString().call(o).slice(8,-1);
}
classof(null);      //"Null"
classof(1);         //"Number"
classof([]);        //"Array"

//可扩展属性
var o = Object.seal(Object.create(Object.freeze({ x: 1 }), { y: { value: 2, writable: true } }));

//8、序列化对象
o = { x: 1, y: { z: [false, null, ""] } };
s = JSON.stringify(o);
p = JSON.parse(s);

//9、对象方法
var s = { x: 1, y: 1 }.toString();
var a = Array.toString();
var n = Number.toLocaleString();
var d = Date.toJSON();
var dd = Date.valueOf();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: