简单对象的创建
1.创建一个对象
var newObject = new Object();
2.添加元素
newObject.firstName = "frank";
3.添加函数
newObject.sayName = function() {
alert(this.firstName)
}
4.调用函数
newObject.sayName();
5.实质:实际上是关联数组,可以用一下方法来检索元素和调用函数
var theFirstName = newObject["firstName"];
newObject["sayName"] ();
6.基于逻辑调用函数
var whatFunction;
if (whatVolume == 1) {
whatFunction = "sayName"
}
if (whatVolume == 2) {
whatFunction = "sayLoudly"
}
newObject[whatFunction]();
7.使用已存在的函数进行添加函数
function sayLoudly() {
alert(this.firstName.toUpperCase());
}
newObject.sayLoudly = sayLoudly;
使用JSON对象(JavaScript Object Notation)
1使用JSON创建前面的对象
function sayLoudly() {
alert(this.firstName.toUpperCase());
}
var newObject = {
firstName : "frank",
sayName : function() { alert(this.firstName) },
sayLoudly : sayLoudly
}
2.对象的嵌套(在newObject中嵌套LastName对象)
function sayLoudly() {
alert(this.firstName.toUpperCase());
}
var newObject = {
firstName : "frank",
sayName : function() { alert(this.firstName); },
sayLoudly : sayLoudly,
LastName : {
lastName : "za",
sayName : function() { alert(this.lastName); }
}
}
类的定义
本质:是一个函数
定义:
function newClass() {
alert("constructor");
this.firstName = "frank";
this.sayName = function() {
alert(this.firstName);
}
}
var nc = new newClass();
nc.sayName();
不足之处:每个实例都含有并存储类的属性(必须要)和方法(只想要一个地方存就可以了)
原型
目的:为了解决方法被存在每一个实例中的内存问题,此
原理:定义在对象的原型中欧的所有属性和方法,在运行时会附着在那个新的实例上
function newClass() {
this.firstName = "frank";
}
newClass.prototype.sayName = function() {
alert(this.firstName);
}
var nc = new newClass();
nc.firstName
注释:内存中sayName()函数只会有一个单独的实例,这个方法实际上是附加在每个实例上的,this是在运行时被计算的
各种方式比较
1.当你需要创建一个很大的类,而且可能会有很复杂的实例,那么最好使用原型的方法
2.当你要创建一个单独的类,并且知道这个类只有一个实例,可以直接定义一个类
3.如果你的对象层级关系嵌套很多,或者需要一个动态方式定义一个对象,或者需要将对象序列化并且经过网络传输,或者需要重构一个从服务器传来的对象的时候,建议 使用JSON的方法
面向对象的好处:
1.隐藏数据
function newClass() {
this.firstName = "Frank";
lastName = "Zame";
}
var nc = new newClass();
alert(nc.firstName);
alert(nc.lastName);
注:第二个会打印undefind,只有加了this的字段才能在类外访问
2.可以调用其他对象中的函数
function newClass() {
this.firstName = "Frank";
this.toUC = string.toUpperCase;
this.toString = function() {
return this.toUC(this.firstName);
}
}
var nc = new newClass();
alert(nc);
柔性衰减和不唐突JavaScript
1.保持JavaScript的队医
2.允许柔性衰减
3.从不使用浏览器嗅探脚本来判断一个浏览器的能力
4.任何情况下都不要写浏览器不兼容的代码
5.合适的作用域变量
6.对于可访问性,避免需要鼠标事件触发的触发器