构造函数和普通函数的区别,在于功能:
构造函数功能为 初始化对象,new就是通过构造函数,创建新对象
构造函数:
function Person(name, gender, hobby) {
this.name = name;
this.gender = gender;
this.hobby = hobby;
this.age = 6;
}
通过构造函数,创建新对象
var p1 = new Person('zs', '男', 'basketball');
var p2 = new Person('ls', '女', 'dancing');
var p3 = new Person('ww', '女', 'singing');
var p4 = new Person('zl', '男', 'football');
此时你会发现,创建对象会变得非常方便。所以,虽然封装构造函数的过程会比较麻烦,但一旦封装成功,我们再创建对象就会变得非常轻松,这也是我们为什么要使用构造函数的原因。
var p2 = new Person('ls', '女', 'dancing'); // 创建一个新的内存 #f2
var p3 = new Person('ww', '女', 'singing'); // 创建一个新的内存 #f3
每当创建一个实例的时候,就会创建一个新的内存空间(#f2, #f3),创建 #f2 的时候,函数体内部的 this 指向 #f2, 创建 #f3 的时候,函数体内部的 this 指向 #f3。
(3) 执行函数体内的代码
通过上面的讲解,你就可以知道,给 this 添加属性,就相当于给实例添加属性。
首先,当用 new 关键字调用时,产生一个新的内存空间 #f1,并标记为 Person1 的实例;接着,函数体内部的 this 指向该内存空间 #f1;执行函数体内部的代码;由于函数体内部的this 指向该内存空间,而该内存空间又被变量 p1 所接收,所以 p1 中就会有一个 name 属性
具体:https://www.jianshu.com/p/7e21e23ffba9转载
JS给构造函数添加方法
Js构造函数添加方法有多种方案,来看一个混合方式构造函数的例子:申明person构造函数,有两个属性,name,qq。在原型上添加方法showname。这是最常用的方法。
<script> function person(name,qq){ this.name = name; this.qq = qq; } person.prototype.showname = function(){//这里showname即使方法的引用也是方法名,有点奇怪 alert("我的名字:"+this.name); } var p1 = new person("张三",11111); var p2 = new person("李四",22222); p1.showname(); //alert(p1.showname == p2.showname );//true </script>
上面的例子中showname 我的理解是:这里showname既是方法的引用也是方法名。
Showname除了这种写法,还可以有以下两种方法,最后一种封装的更好:
//第二种 person.prototype = { showname: function(){ alert('我的名字'+this.name) } } //第三种 person.prototype = function(){ showname = function(){alert('我的名字:'+this.name)} return { showname: showname} }()