美文网首页
JavaScript

JavaScript

作者: 我家金毛叫Teemo | 来源:发表于2016-05-17 21:03 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/ppxhrttx.html