javascript语言精粹

虽然javascript已使用过一段时间,但也仅此而已了,仅仅停留在使用的阶段,虽然可以用它来做出一些功能,但是关于javascript的一些基础的东西并不是很清楚。
     一本好书可以让我们的学习事半功倍,关于javascript的书籍有两类,第一类是javascript语言精粹,第二类就是其他javascript书籍。javascript语言精粹的作者是javascript开发社区中大师中的大师,这本书可以让我们知道原来javascript是这么简单易学。确实值得我们反复细读,精读。
      javascript中数据类型有两大类,
       一、简单类型,包括number、string、boolean、undefined。二、对象,包括function、object。
      在javascript中,对象是一个可以动态变化的键值对集合,尽管number、string、boolean都貌似对象(拥有方法),但他们不可变。在javascript中获取一个值的类型,可以通过“typeof 变量名”或者“typeof 值”来获取这个值的类型。这个表达式返回一个内容为类型的string。如 ”typeof 2“返回"number";如果你对function是对象感觉有点奇怪的话,那是因为你最先接触的编程语言不是javascript,仅此而已。
      二、javascript中一个很重要的特性是原型继承,现在总结一下我对原型继承这个特性的理解。
      强调以下几点:
       1.在javascript中对象是一个名值对的集合。可以动态的去为对象添加属性,删除属性,修改属性值。
          如var object=new Object();
              object.name="xx";//object便有了一个叫name的属性。
              alert(object.name);//弹出"xx"
              delete object.name;//删除object中的name属性
              alert(object.name);//弹出undefined
       2.在javascript中函数是对象,它是一个特殊的对象,它可以被调用。
           var func=function(){alert("自定义函数");};//定义了一个函数对象,
                func.description="弹出一个值";//函数是对象,自然可以像1中那样使用它。这里给func动态添加一个description属性.
                delete func.description;//删除func的description属性。
            //不要对函数是对象觉得很难理解。其实很多时候,我们都是受到了受到固有思维的束缚,如果我们一开始接触的编程语言是javasc // ript,可能就不会对此感到奇怪了。它除了可以被调用之外,还有其他的特殊之处。
        3.通过new 函数名();可以去生成一个新对象。//这个新生成的对象与函数对象之间的关系,待会说明。
        4.每个对象都有一个原型对象(或者说父对象),除了Object.prototype外。每个对象内部都有一个到原型对象的隐藏连接,强调一下,是隐藏链接,我们无法获取这个链接。这个链接,是由javascript解析器去使用的。这样,每个对象通过父对象可以一直追溯到Object.prototype,形成一个原型链。
        对象分两种,函数对象和其他对象。
        函数对象(function)的原型链为  自定义函数对象—(隐藏连接)—>Function.prototype—(隐藏连接)—>Object.prototype;
        比如我们自定义一个函数对象var Date=function(){};则Date的原型对象为Function.prototype,而Function.prototype的原型对象为Object.prototype。函数对象的另一个特殊之处在于它有prototype属性。而普通对象是没有这个属性的。
       普通对象(object)如果由这种形式定义var object={};那么其原型链为object—(隐藏连接)—>Object.prototype。如果由函数构建出一个新对象,如 var object=new Date(); 则原型链为object—(隐藏连接)—>Date.prototype——>Date.prototype的原型——>....——>Object.prototype。
        上面就揭示了通过函数创建出的对象和这个函数对象之间的关系,通过new Date()创建出的对象其原型对象为Date.prototype,Date.prototype从字面意思可以这么理解,它是通过Date函数创建出的对象的原型。对Function.prototype的字面意思可以这么理解,它是所有函数对象的原型对象。Object.prototype所有对象的原型对象。Function、Object也是函数对象,自然他们的原型对象为Function.prototype。
         还需要注意一点。我们可以为Function.prototype和Object.prototype动态添加删除属性,但是我们不能改变他们的值。
         比如我们可以这样设置
Object.prototype.property=""; (动态为其添加property属性)但是Object.prototype={name,"name"};是没有任何作用的,而我们自定义的函数对象可以这样,如Date.property={name,"name"};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值