昆明猫咪科技网站建设,网站建设介绍怎么写,1+官网商城,深圳外贸网站制作公司ECMAScript 有两种开发模式#xff1a;1.函数式(过程化)#xff0c;2.面向对象(OOP)。面向对象的语言有一个标志#xff0c;那就是类的概念#xff0c;而通过类可以创建任意多个具有相同属性和方法的对象。但是#xff0c;ECMAScript 没有类的概念#xff0c;因此它的对象…ECMAScript 有两种开发模式1.函数式(过程化)2.面向对象(OOP)。面向对象的语言有一个标志那就是类的概念而通过类可以创建任意多个具有相同属性和方法的对象。但是ECMAScript 没有类的概念因此它的对象也与基于类的语言中的对象有所不同。 js本身是没有class类型的但是每个函数都有一个prototype属性。prototype指向一个对象当函数作为构造函数时prototype则起到类似class的作用。 var box new Object(); //创建一个Object 对象
box.name Lee; //创建一个name 属性并赋值
box.age 100; //创建一个age 属性并赋值
box.run function () { //创建一个run()方法并返回值
return this.name this.age 运行中...;
};
alert(box.run()); //输出属性和方法的值 上面创建了一个对象并且创建属性和方法并且实例化该对象最后调用对象的方法。在run()方法里的this就是代表box 对象本身。但是有个缺点就是不能实例化多个具有相似属性和方法的对象。于是我们想到了可不可以有一套模板来批量制作对象。于是就有了-工厂模式。看下面例子 function createObject(name, age) { //集中实例化的函数
var obj new Object();
obj.name name;
obj.age age;
obj.run function () {
return this.name this.age 运行中...;
};
return obj;
}
var box1 createObject(Lee, 100); //第一个实例
var box2 createObject(Jack, 200); //第二个实例
alert(box1.run());
alert(box2.run()); //保持独立 这种方法虽然制造出来了一套模板来规范待实例化的对象。但是还有许多问题比如创建不同对象其中属性和方法都会重复建立消耗内存还有函数识别问题等等。其实还有更优秀的也是用的最多的方法看下面示例。 function Box(name, age) { //构造函数模式
this.name name;
this.age age;
this.run function () {
return this.name this.age 运行中...;
};
}
var box1 new Box(Lee, 100); //new Box()即可
var box2 new Box(Jack, 200);
alert(box1.run());
alert(box1 instanceof Box); //很清晰的识别他从属于Box 这个方法看似像一个函数但又有些不太一样。比如函数名一般都小写。如果学过其他面向对象的语言就会知道这是类的写法此处不多分析非强制但这么写有助于区分构造函数和普通函数。这种方法是构造函数创建对象的写法通过构造函数创建对象必须使用new 运算符。 构造函数可以创建对象执行的过程 1当使用了构造函数并且new 构造函数()那么就后台执行了new Object()2将构造函数的作用域给新对象(即new Object()创建出的对象)而函数体内的this 就代表new Object()出来的对象。3执行构造函数内的代码4返回新对象(后台直接返回)。 注 1构造函数和普通函数的唯一区别就是他们调用的方式不同。只不过构造函数也是函数必须用new 运算符来调用否则就是普通函数。 2this就是代表当前作用域对象的引用。如果在全局范围this 就代表window 对象如果在构造函数体内就代表当前的构造函数所声明的对象。 这种方法解决了函数识别问题但消耗内存问题没有解决。同时又带来了一个新的问题全局中的this 在对象调用的时候是Box 本身而当作普通函数调用的时候this 又代表window。即this作用域的问题。转载于:https://www.cnblogs.com/coolzone/p/6589090.html