我们在定义一个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可以改变对象的作用域链