zoukankan      html  css  js  c++  java
  • prototype属性的理解

         1.对象对象是JS的基本数据类型(原始类型(数字、字符串和布尔值),对象类型)。对象是一种复合值:它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值。

         2.三类JS对象和两类属性:

              内置对象:是由ECMAScript规范定义的对象或类。例如,数组(Array)、函数(Function)、日期(Date)和正则表达式(RegExp)都是内置对象

              宿主对象:由JS解释器所嵌入的宿主环境定义的。客户端JS中表示网页结构的HTMLElement对象均是宿主对象,既然宿主环境定义的方法可以当成普通的JS函数对象,那么宿主对象也可以当成内置对象。

              自定义对象:由运行中的JS代码创建的对象。

              自有属性:直接在对象中定义的属性。

              继承属性:在对象的原型对象中定义的属性。

         3.对象三个特征        

              对象的原型:指向另外一个对象,本对象的属性继承自它的原型对象。

              对象的类:是一个标识对象类型的字符串。

              对象的扩展标记:指明了是否可以向该对象添加新属性

         4.对象的原型:

              概念:每一个JS对象(null除外)都和另一个对象相关联。"另一个"对象就是我们熟知的原型,每一个对象都从  原型对象  继承属性

              理解几句话:

                  1).所有通过 对象直接量 创建的对象都具有同一个原型对象,并可以通过JS代码Object.prototype获得对原型对象的引用。

                       对象直接量:是由若干名/值对组成的映射表,名/值对中间用冒号分隔,名/值对之间用逗号分隔,整个映射表用花括号括起来。

                             对象直接量例子:

                                var empty = {}; //没有任何属性的对象

                                var point = {x:0,y:0}; //两个属性

                                var point2 = {x:point.x,y:point.y}; //更复杂的值

                                var book = {

                                     "main title" : "JavaScript", //属性名字里有空格,必须用字符串表示

                                     "sub-title" : "the definitive guide", //属性名字里有连字符,必须用字符串表示

                                     "for" : "all audiences", //"for"是保留字,因此必须用引号

                                     autor : {                    //这个属性的值是一个对象

                                           firstname : "David",    //注意,这里的属性名都没有引号

                                           surname : "Flanagan"

                                         } 

                                 };

                  2).通过关键字new和构造函数调用创建的 对象 的 原型 就是 构造函数的prototype属性 的值。

                    prototype只是函数有,自定义函数、JS内部构造函数(Array, Function, String ....)本质上都是有prototype

                    使用{}创建对象一样,通过new Object()创建的对象也继承自Object.prototype.

                    通过new Array()创建的 实例对象 的 原型 就是Array.prototype, (Array,Date等都是JS内部构造函数)。 

                           var a = new Array();

                           分析:这里a是一个Array类实例对象,Array是JS内部构造函数,new和构造函数调用创建一个新的实例对象,(注意,new运算符创建并初始化一个新对象。关键字new后跟随一个函数调用。这里的函数称做构造函数(constructor))。

                     通过new Date()创建的 实例对象 的 原型 就是Date.prototype. 

                           var b =  new Date();

                           分析:这里b是一个Date类实例对象,Date是JS内部构造函数,

                           console.log(b.prototype); //undefined

                           console.log(Date.prototype); //Date{}

                           console.log(b.constructor); //Date() 

        5.对象的类:

                  如果定义一个原型对象,然后通过inherit()函数创建一个继承自它的对象,这样就定义了一个JS类。   

                 function Person(name, gender) {

                        this.name = name;

                        this.gender = gender;

                       }
                   Person.prototype.hello = function(){
                        alert("hello, my name is" + this.name);
                     };
                   var man = new Person("张三", "男")

                 man是构造函数Person的一个实例(即类Person的实例),是对象型即object的类实例,自动具备 构造函数原型(Person.prototype) 上的定义的方法(hello)。
                 当修改或增加构造函数prototype上的属性或方法时,它的所有实例也会同步更新。实例具备类原型上的所有方法和属性。

     
     

      
  • 相关阅读:
    C++中break语句、continue语句和goto语句区别
    面试题 01.03:URL化(C++)
    面试题 01.02: 判定是否互为字符重排(C++)
    面试题 01.01: 判定字符是否唯一(C++)
    探索one
    面试题32
    面试题32
    面试题32
    面试题33: 二叉搜索树的后序遍历序列(C++)
    用命令行执行php脚本输出乱码
  • 原文地址:https://www.cnblogs.com/hanxuming/p/5848695.html
Copyright © 2011-2022 走看看