JavaScript

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

你可能感兴趣的:(JavaScript)