zoukankan      html  css  js  c++  java
  • Javascript构建对象之旅

    Javascript创建对象:

    1、使用一对大括号,如下形式
     
    1. var person = { 
    2.             'id':1, 
    3.             'name':'yining' , 
    4.             'get':function(){ 
    5.                 return this.id; 
    6.             } 
    7.         }; 
    需要对这个对象进行扩充时,可以这样做:
     
    1. person.speak = function(language){ 
    2.                 alert(this.name+" speaks "+language); 
    3.         } 
    调用:     person.speak("chinese");
    但是使用这种方式时,只是简单的声明了一个变量,只有一份拷贝,因此不能使用new操作。在需要多个对象时,可以使用下面的方法。
    2、使用关键字function,在Javascript中,没有Class这样的关键字,可以使用function来模拟类的创建
    1. function Person(id ,name){ 
    2.              this.id  = id; 
    3.              this.name = name; 
    4.              this.getId = function(){ 
    5.                  return this.id; 
    6.              } 
    7.          } ; 
     var person = new Person(22,'yining'); 使用new关键字产生一个Person实例person(当然你可以new多个实例),这种通过New来产生实例的方式不推荐,因为这个过程会很慢,消耗时间。当需要对这个对象进行扩展时,也可以通过
     
    1. person.speak = function(language){ 
    2.                 alert(this.name+" speaks "+language); 
    3.         } 
    这种方式。

    说说function关键字
     
    在对象的创建过程中,多次使用了function关键字,使用function既可以创建对象,同时也是函数的声明关键字,一般来说,function有三种功能:
    1、普通函数:
     
    1. function fun_name([arguments]){ 
    2.       
    2、构造函数:
     
    1. function Obj_name([arguments]){ 
    2.      属性 = 属性赋值; 
    3.       ....... 
    3、构造完整对象:
     
    1. function Obj_name([arguments]){ 
    2.      这里不仅包括属性也有方法; 
    3.      ....... 
    注意:当function被用来做构造函数和构造对象时,对象名首字母大写。
    这里是人为的强制性的将function的功能细分为3种(或许可以分得更多),实际上,在javascript中,由于函数本身就是对象(任何函数都是Function的实例,函数名只是指向这个函数的一个引用),所以函数可以有自己的属性和方法,这个弱化了函数和对象之间的区别。(如果在Java中,也提供了一个Function的类,那么所有类内部封装的方法是不是也可以作为一个对象,这才是真正的面向对象?只有这样,才能符合“一切都是对象”?)
     

    对象的继承
     
    在javascript中,使用对象冒充+原型链来实现对象的继承。
    首先看一个例子:
     
    1. function Person(id,name){     //属性使用构造函数的形式 
    2.     this.id = id; 
    3.     this.name = name; 
    4. Person.prototype.getName = function(){     //方法使用原型 
    5.     alert(this.name); 
    6.  
    7. function Chinese(id ,name,province){ 
    8.     Person.call(this,id,name);      //对象冒充继承Person类的属性,实际上是函数call的调用 
    9.     this.province = province; 
    10. Chinese.prototype = new Person();      //用原型链继承Person类的方法,本质上是把Person类的实例赋予prototype属性。 
    11. Chinese.prototype.getProvince = function(){ 
    12.     alert(this.province); 
    13. var ch = new Chinese(1,'yining','sha\'anxi'); 
    14. ch.getProvince(); 
    为什么要采取这种方式来实现继承?不是很麻烦么?这种做法的确看起来不如Java、c++中的继承来的方便,但是这的确是在多种角度权衡下最合理的方式,具体的权衡您可以去看《javascript高级程序设计》。
    注意:在创建对象时,属性使用构造函数的形式,方法则采用原型的方式,这样在要多次生成实例时,可以减少开销。在实现继承时,使用BaseClass.call(this,[arguments])实现属性的继承,将BaseClass的实例赋予ChildClass.prototype属性,来实现方法的继承。
     
    由于Javascript是一种动态的语言,在完成实例的创建后,可以继续为此实例进行扩展,添加函数。而在java中是不允许对实例进行扩展以及不允许对声明后的类进行修改。在Javascript中,所有的一切都可以在运行时被修改。
  • 相关阅读:
    大型网站技术架构(八)--网站的安全架构(转)
    大型网站技术架构(七)--网站的可扩展性架构(转)
    大型网站技术架构(六)--网站的伸缩性架构(转)
    大型网站技术架构(五)--网站高可用架构(转)
    大型网站技术架构(四)--网站的高性能架构(转)
    HTML中的空元素
    jetbrains 全家桶,Pycharm激活码,PHPStorm激活码,WebStorm激活码,Goland激活码,Clion激活码,intellij idea激活码(亲测可用)
    legend3---22、通过html,可以使php、vue、jquery、js达成完美的配合
    IlluminateDatabaseQueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
    template cannot be keyed. Place the key on real elements instead.
  • 原文地址:https://www.cnblogs.com/benshan/p/3068860.html
Copyright © 2011-2022 走看看