单例模式 ??(基于对象,不能批量生产)
var person = {
name: "ywb",
sayHi: function () {
alert();
} ,
0:'0',
1 :'1'
}
person.sayHi();
for (var k in person) {
//k是属性名
//得到属性值 person[k]
alert(k);
alert(person[k]);
}
特点
1,我们定义的这些属性和值都是对我们当前这个对象的描述
定义属性名的时候可以用数字,把可以用数字这种形式成为类数组
2 , 对象的属性之间有可能也是有关联的
3,通过for in遍历对象的时候,如果有数字的属性名,就先遍历数字
for in循环中获取对象的属性值,只能用obj[属性名]的方式。
--------------------------------------------------------------------
工厂模式
定义一个方法,方法内部创建一个Object数据类型,然后返回这个对象。
function factory(name, age) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayHi = function () {
alert("hello," + name);
}
return obj;
}
var ywb = factory("ywb", 18);
ywb.sayHi();
工厂模式所有的对象类型都是一个object
构造函数模式
个人理解:更像class一样,创建对象去new一个class
通过new这种方式,出来的结果是一个实例。
function person(name, age) {
this.name = name;
this.age = age;
this.sayHi = function () {
alert("hello," + name);
}
}
var ywb = new person("ywb", 18);
ywb.sayHi();
alert(ywb instanceof Person ); //可以确定ywb是Person的实例
这时候,这个实例(对象)是谁,this就指向谁。this就是这个实例的上下文in
因为每一次实例化一个function,都会在内存中存这个function的字符串
原型模式
创建一个对象,我们不仅在内存中开辟了空间,将自己私有的键值对存进来,还有个系统自带的属性_proto_。
在声明function时,它也有一个自己的属性,就是prototype。
prototype也有_proto_属性
function factory(age) {
this.name = "hart";
this.age = age;
}
factory.prototype.sayHi = function () {
alert("hello," + name);
}
factory.prototype.name = "ywb";
var p1 = new factory(11);
p1.__proto__ = null;
alert(p1.name);
如果我们的某个实例想获取类中的prototype上定义的方法和属性,我们的原理是实例中默认的_proto_属性去获取。
调用一个方法或属性,首先去其私有属性上找,没有找到才去原型链上找。
Object是所有实例的基类。
p1.__proto__.name 就是去原型上找而不去属性上找
如果你觉得我的文章对您有帮助,给点鼓励,谢谢