构造函数
function Foo(name ,age){//构造函数的命名规则大写字母开头
this.name = name;
this.age = age;
this.other = "other";
//return this; 默认会返回this
}
$(function(){
var f = new Foo("mark","31");
//补充
//var a = {} 其实是 var a = new Object()的语法糖
//var a = [] 其实是 var a = new Array()的语法糖
//function Foo(){} 其实是 var Foo = new Function()的语法糖
});
new一个对象的过程
- 创建一个新对象
- this指向这个新对象
- 执行代码,即对this赋值
- 返回this
原型规则
- 引用类型(对象,数组,函数)可以自动扩展属性;
- 引用类型(对象,数组,函数)都有一个隐式原型属性(proto);
- 函数拥有一个显示原型属性(prototype,属性值也是一个普通对象
- 引用类型变量的隐式原型 === 它的构造函数的显示原型
- 当视图得到一个对象的属性,如果这个对象本身没有这个属性,那么回去它的构造函数(隐式原型)中寻找。
编写一个原型链的Demo
function Elem(id){
this.elem = document.getElementById(id);
}
Elem.prototype.html = function(val){
var elem = this.elem;
if(val){
elem.innerHTML = val;
return this;//链式操作
}else{
return elem.innerHTML
}
}
Elem.prototype.on = function(type,fn){
var elem = this.elem;
elem.addEventListener(type,fn);
return this;
}
$(function(){
var div1 = new Elem("divId");
div1.html('<p>原型链</p>')
.on("click",function(){//链式操作
alert("This is click");
});
});
补充:
判断引用类型变量属于哪个构造函数的方法instanceof