js学习之function是对象

我们在定义一个function的时候,也就是产生了一个Function的实例,根据ECMAScript动态添加属性这个特性,我们可以这样  functionName.property = value 然后 可以  可以使用这个 function对象了。。

ECMA-262:对象是,无序属性的集合,其属性可以包含基本值,对象或者函数。我们可以把ECMAScript想象为,散列表,散列表就是一组名值对,其值可以是数据或者函数。

原型模式要解决的问题:

             几种创建对象的方式: 一 :可以使用Object构造函数创建对象,二:使用字面值来创建对象,三:使用工厂模式,四:构造函数模式,五:原型模式.

      var obj = new Object();

      obj.property = value;

      obj.functionName = function(){};

      这个会导致大量的重复代码

     var obj  ={property: value,functionName:function(){} }

    这个会导致大量的重复代码

   function createObj(){ var  obj = new Object();obj.property = value; obj.functionName=function(){};return  obj}  这个会导致不会知道对象的类型

       构造函数问题是:  function constructorName(){ this.property = value;var functionName = function(){}};这样每次创建对象的时候,都会创建一个function实例,没有必要这么做,可以把function提取出来作为公共的方法   这样每一个创建的对象都公用这一个公共的方法,解决的实例是这样的:function ConstructorName(){this.property = value;this.functionName = functionName}   function  functionName(){ this.property}  这样全局函数 就变为某个对象的函数了,失去了全局函数的作用 。  ;

  使用原型链来解决以上问题: function functionName(){this.property = value;}  functionName.prototype.functionName= function (){aler(this.property)};  call可以改变对象的作用域链

     

猜你喜欢

转载自632928374.iteye.com/blog/2263506