• JavaScript 弱类型


    我们说JavaScript 是一种弱类型的语言,一方面体现在JavaScript 的变量、参数和返回值可以是任意类型,另一方面也体现在,JavaScript 可以对对象任意添加属性和方法,这样无形中就淡化了“类型”的概念。

    对象的三种基本构造法
    //第一种构造法:new Object
    var a = new Object();
    a.x = 1, a.y = 2;
    //第二种构造法:对象直接量
    var b = {x : 1, y : 2};
    //第三种构造法:定义类型
    function Point(x, y)
    {
    this.x = x;
    this.y = y;
    }
    var p = new Point(1,2);

    //var user=new Object();

    1.添加属性,方法

    user.name="hongda";

    user.alert=function(){alert(this.name);}

    2.修改属性,方法

    user.name="hongdada";

    user.alert=function(){alert("my name is "+this.name);}

    3.删除属性,方法

    user.name=undefined;

    user.alert=undefined;

    属性和方法的类型

    JavaScript 里,对象的属性和方法支持4 种不同的类型,

    第一种类型就是前面所说的私有类型,它的特点是对外界完全不具备访问性,要访问它们,只有通过特定的getter 和setter。

    第二种类型是动态的公有类型,它的特点是外界可以访问,而且每个对象实例持有一个副本,它们之间不会相互影响。

    第三种类型是静态的公有类型,或者通常叫做原型属性,它的特点是每个对象实例共享唯一副本,对它的改写会相互影响。

    第四种类型是类属性,它的特点是作为类型的属性而不是对象实例的属性,在没有构造对象时也能够访问.

    <!--
    function dwn(s)
    {
    document.write(s + "<br/>");
    }
    function myClass()
    {
    var p = 100; //private property; 私有属性
    this.x = 10; //dynamic public property 动态公有属性
    }
    myClass.prototype.y = 20; //static public property or prototype property 原型属性
    myClass.z = 30; //static property //静态属性
    var a = new myClass();
    dwn(a.p); //undefined 私有属性对象无法访问到
    dwn(a.x); //10 公有属性
    dwn(a.y); //20 公有属性
    a.x = 20;
    a.z = 40;
    dwn(a.x); //20
    dwn(a.y); //40 //动态公有属性y 覆盖了原型属性y
    delete(a.x);
    delete(a.y);
    dwn(a.x); //undefined 动态公有属性x 被删除后不存在
    dwn(a.y); //20 动态公有属性y 被删除后还原为原型属性y
    dwn(a.z); //undefined 类属性无法通过对象访问
    dwn(myClass.z); //30 类属性应该通过类访问
    -->

     私有属性(不能被该类的prototype访问)

    function class1(){
    var pp=" this is a private property"; //私有属性成员pp
    function pm(){ //私有方法成员pm,显示pp的值
    alert(pp);
    }
    this.method1=function(){
    //在公有成员中改变私有属性的值
    pp="pp has been changed";
    }
    this.method2=function(){
    pm(); //在公有成员中调用私有方法
    }
    }
    var obj1=new class1();
    obj1.method1(); //调用公有方法method1
    obj1.method2(); //调用公有方法method2

    这些局部变量(私有成员),被所有在构造函数中定义的公有方法所共享,而且仅被在构造函数中定义的公有方法所共享。

    这意味着,在prototype中定义的类成员将不能访问在构造体中定义的局部变量(私有成员)。

    静态属性

    function class1(){//构造函数
    }
    //静态属性
    class1.staticProperty=”sample”;
    //静态方法
    class1.staticMethod=function(){
    alert(class1.staticProperty);
    }
    //调用静态方法
    class1.staticMethod();
  • 相关阅读:
    LG4762 Virus synthesis
    深入浅出Vue.js(一) 变化侦测
    LRU
    时间复杂度 & 空间复杂度
    rem的实现原理
    瀑布流布局
    ts-不懂强记
    Notification
    Grid & Flex
    交换两个变量的值
  • 原文地址:https://www.cnblogs.com/hongdada/p/2860980.html
Copyright © 2020-2023  润新知