1 javascript基本数据类型
string number boolean object function undefined
typeof javascript中任何对象 只能得到这6种结果
2 javascript中的对象
//简单的一个对象的声明
var object = new Object();
//假如执行 typeof(Object) 结果将会是function,这说明javascript中的对象是可以通过new一个function的方法获得,并且拥有该function的所有属性,如下
//javascript中的对象声明方法一
function simpleFunc() {
this.name = 'simpleFunc Oject';
this.say = function(arg1, arg2) { alert('this.name=' + this.name + '\narg1=' + arg1 + '\narg2=' + arg2); }
alert('object construct function call!');
}
var simpleObject = new simpleFunc();
//此时simpleFunc就可以看作是其它面向对象语言的构造函数一样了
//javascript中的对象声明方法二
var object = {
name:'defaule object';
say:function(arg1, arg2) { alert('this.name=' + this.name + '\narg1=' + arg1 + '\narg2=' + arg2); };
};
//缺省的构造函数是Object
//可以看到,javascript中的对象跟函数都可以拥有自己的属性以及方法
//区别 1、函数是可执行的 2 对象可以通过'.'操作符来指向对象的属性,函数不可以.
3 javascript中函数调用的三种方法
//声明了一个function后,如何调用呢?
//第一种方法
simpleObject.say('method1[arg1]', 'method1[arg2]');
//第二种方法
//声明执行函数的作用域,也是this所指向的对象
var scope = simpleObject;
simpleObject.say.call(scope, 'method2[arg1]', 'method2[arg2]');
//这里传入的第一个参数 scope 将作为say函数运行里面的this 也就是 this = simpleObject
//第三种方法
scope = object;
simpleObject.say.apply(scope, ['method3[arg1]', 'method3[arg2]'])
//这里传入的第一个参数 scope 将作为say函数运行里面的this 也就是 this = object
//apply函数与call函数的唯一区别是参数不同,apply的第二个入参是数组
//以上这三种调用方法比较常用,在一个函数的入参中传入一个函数,可以使用上面这三种方法去执行这个函数
4 javascript中的prototype
//prototype是javacript的函数的内置对象,typeof任何函数的prototype都将返回'object';
//如下
alert(typeof(simpleFunc.prototype));//即便没有声明该属性,依然是存在的
alert(typeof(String.prototype));//String是javascript的内置函数
var string = 'i am a string';
//相当于 var string = new String('i am a string');
String.prototype.say = function() {alert(this);}
string.say();
//这时可以看到string对象并没有声明say这个函数属性,但是却可以执行这个函数
//这是因为javascipt在执行函数的时候,假如该对象没有该函数,则会执行prototype对象的同名函数,
//假如prototype对象没有该函数,会继续递归执行prototype对象的prototype对象的同名函数,直至顶层
//prototype对象结束,假如一直到顶层都还没找到,则扔出异常'对象不支持此属性或方法'
//这样就很方便对函数的属性进行扩展,只要往prototype中增加一个属性函数,则所有对象都拥有了该属性
5 javasript中的继承
//javascript中的继承可以用下面的方法实现
//定义父类
function base() {
this.name = 'name';
//私有变量 不被子类继承
var baseProperty = 'base private property';
}
//定义父类原型属性
base.prototype.say = function() {alert('base prototype function property');}
//第一步:定义子类 继承父类的属性
string number boolean object function undefined
typeof javascript中任何对象 只能得到这6种结果
2 javascript中的对象
//简单的一个对象的声明
var object = new Object();
//假如执行 typeof(Object) 结果将会是function,这说明javascript中的对象是可以通过new一个function的方法获得,并且拥有该function的所有属性,如下
//javascript中的对象声明方法一
function simpleFunc() {
this.name = 'simpleFunc Oject';
this.say = function(arg1, arg2) { alert('this.name=' + this.name + '\narg1=' + arg1 + '\narg2=' + arg2); }
alert('object construct function call!');
}
var simpleObject = new simpleFunc();
//此时simpleFunc就可以看作是其它面向对象语言的构造函数一样了
//javascript中的对象声明方法二
var object = {
name:'defaule object';
say:function(arg1, arg2) { alert('this.name=' + this.name + '\narg1=' + arg1 + '\narg2=' + arg2); };
};
//缺省的构造函数是Object
//可以看到,javascript中的对象跟函数都可以拥有自己的属性以及方法
//区别 1、函数是可执行的 2 对象可以通过'.'操作符来指向对象的属性,函数不可以.
3 javascript中函数调用的三种方法
//声明了一个function后,如何调用呢?
//第一种方法
simpleObject.say('method1[arg1]', 'method1[arg2]');
//第二种方法
//声明执行函数的作用域,也是this所指向的对象
var scope = simpleObject;
simpleObject.say.call(scope, 'method2[arg1]', 'method2[arg2]');
//这里传入的第一个参数 scope 将作为say函数运行里面的this 也就是 this = simpleObject
//第三种方法
scope = object;
simpleObject.say.apply(scope, ['method3[arg1]', 'method3[arg2]'])
//这里传入的第一个参数 scope 将作为say函数运行里面的this 也就是 this = object
//apply函数与call函数的唯一区别是参数不同,apply的第二个入参是数组
//以上这三种调用方法比较常用,在一个函数的入参中传入一个函数,可以使用上面这三种方法去执行这个函数
4 javascript中的prototype
//prototype是javacript的函数的内置对象,typeof任何函数的prototype都将返回'object';
//如下
alert(typeof(simpleFunc.prototype));//即便没有声明该属性,依然是存在的
alert(typeof(String.prototype));//String是javascript的内置函数
var string = 'i am a string';
//相当于 var string = new String('i am a string');
String.prototype.say = function() {alert(this);}
string.say();
//这时可以看到string对象并没有声明say这个函数属性,但是却可以执行这个函数
//这是因为javascipt在执行函数的时候,假如该对象没有该函数,则会执行prototype对象的同名函数,
//假如prototype对象没有该函数,会继续递归执行prototype对象的prototype对象的同名函数,直至顶层
//prototype对象结束,假如一直到顶层都还没找到,则扔出异常'对象不支持此属性或方法'
//这样就很方便对函数的属性进行扩展,只要往prototype中增加一个属性函数,则所有对象都拥有了该属性
5 javasript中的继承
//javascript中的继承可以用下面的方法实现
//定义父类
function base() {
this.name = 'name';
//私有变量 不被子类继承
var baseProperty = 'base private property';
}
//定义父类原型属性
base.prototype.say = function() {alert('base prototype function property');}
//第一步:定义子类 继承父类的属性
function child() {
//定义指向父类的变量
this.superclass = base;
//执行父类函数,将使得子类拥有父类一样的属性
this.superclass.call(this);
this.otherProperty = 'otherProperty';
}
//第二步:继承base的prototype
var F = function (){};
F.prototype = base.prototype
child.prototype = new F();
//
child.prototype.constructor = child
//声明一个child对象
var childObject = new child();
alert(childObject.name + '\n' + childObject.baseProperty + '\n' + childObject.otherProperty);
alert(childObject.constructor)
childObject.say();
//定义指向父类的变量
this.superclass = base;
//执行父类函数,将使得子类拥有父类一样的属性
this.superclass.call(this);
this.otherProperty = 'otherProperty';
}
//第二步:继承base的prototype
var F = function (){};
F.prototype = base.prototype
child.prototype = new F();
//
child.prototype.constructor = child
//声明一个child对象
var childObject = new child();
alert(childObject.name + '\n' + childObject.baseProperty + '\n' + childObject.otherProperty);
alert(childObject.constructor)
childObject.say();