JavaScript是一种面向对象的语言,但
并不是一个严格的面向对象的语言,因为js是弱类型语言.不像C++,C#这类型语言!他不支持函数方法重载.你之前写一个方法.后面再写一个相同名字的方法他默认会把上一个方法覆盖掉!这种情况和PHP中相同!
1.它拥有对象,可以包含数据和处理数据的方法。对象可以包含其它对象。他没有类(在javascript2.0真正实现之前),但它却有构造器可以做类能做的事,包括扮演变量和方法的容器和角色。他没有基于类的继承,但它有基于原型的继承。两个建立对象系统的方法是通过继承和通过聚合。javaScript两个都有。
2.一些评价说javascript不是真正面向对象的因为它不能提供信息的隐藏。也就是,对象不能有私有变量和私有方法:所有的成员都是公共的。但随后有人证明了javaScript对象可以拥有私有变量和私有方法。另外还有批评说javascript不能提供继承,但随后有人证明了javascript不仅能支持传统的继承还能应用其他的代码复用模式。
3.说javascript是一种基于对象的语言,是一种正确而略显保守的判断,而说javascript不面向对象,在我看来则是错误的认知,事实上有充足的理由证明javaScript是一种面向对象的语言,只是与传统的基于类的面向对象相比,javaScript有它与众不同的地方,这种独特性我们称它为基于原型的面向对象。
面向对象语言思想中有两个重要的概念
1.类:有相同的特征和行为的事物的抽象
2.对象:类的一个实例
在JS中,判断一个变量是否是一个对象的方法
1.typeof方法
例子:
console.log(typeof 12); //number
console.log(typeof 'abc');//string
console.log(typeof true); //boolean
var fn = function() {};
console.log(typeof fn); //function
var arr = [1,2,'qwer']
console.log(typeof arr) //object(引用类型)
2.instanceof方法 检测某个对象是不是另一个对象的实例。
console.log(true instanceof Object);//false
console.log(arr instanceof Object);//true
var fn = function() {};
console.log(fn instanceof Object);//true
//例如:'qwer',123 直接写是基本类型,不是引用类型,转化一下
var str = new String('qwer');
console.log(str instanceof String);//true
怎么样自己创建一个对象
1.直接创建
结构:
var 变量名 = {
属性名1 : 值,
属性名2 : 值,
函数名 : function(参数){ 函数内容... }
}
例子:
var stu = {
name : '张三',
age : 24,
sex : '男',
sayHi : function(){console.log(this.name);}
}
2.对象的构造函数
为了解决第一种形式,如果要批量创建对象,会非常繁琐
结构:
function 结构函数名(参数1,参数2){
this.属性名1 = 参数1;
this.属性名2 = 参数2;
this.函数名1 = function(){函数内容...};
}
例子:
//构造函数
function Student(name,age){
this.name = name;
this.age = age;
this.sayHi = function(){console.log('我叫' + this.name)};
}
//使用构造函数创建对象
var stu1 = new Student('张三',24);
//对象调用自己的函数
stu1.sayHi();
3.改造的稳妥的构造函数
//改造的稳妥的构造函数
function Person(name,age){
var obj = new Object();
//名义上的私有属性
var n = name;
//设置值
obj.setName = function(nameNew){
n = nameNew;
};
//获取值
obj.getName = function(){
return n;
};
return obj;
}
var person = Person('张三',24);
原型(prototype)
每一个构造函数都有一个原型属性
1.原型的基本用法
Student.prototype.school = '清华';
2.原型链
当要获取对象的某个属性的值的时候
1.判断当前这个对象时候存在这个属性,如果有,就输出
2.如果第一步没有获取到,就去构造函数的原型中找
3.去Object构造函数的原型中找
4.如果都没有找到,就输出undefined
网友评论