js 攻坚克难
阅读原文时间:2023年09月11日阅读:4

new : 官方解释: 如果在一个函数前面带上new来调用,那么背地里将会创建一个连接到该函数的prototype的成员的新对象,同时this会被绑定到哪个新对象上;

new 是用来创建对象的;

当在自定义的function类型前使用new时,只有当函数无返回时才有区别;

当无返回值时:使用new可以获得对象,不使用new就是执行一个普通的函数;

当有返回值时:使用new与否结果都是一样的。

只有类型才有prototype;  比如 Object ,Function,Boolean以及自定义的function

对象才会有__proto__;并且对象的__proto__执行类型的prototype;

Math有__proto__但是没有prototype,因为它是对象,但不是类型。

var Quo = function (str){
this.status = str;
}
//只有类型才能访问到prototype
Quo.prototype.getStatus = function (){
return this.status;
};
var myQuo2 = new Quo("c222");
var myQuo = new Quo("confused");
//对象的__proto__执行类型的prototype
myQuo.__proto__.gstatus = function (){
alert(2222);
}
alert(myQuo.getStatus());
myQuo.gstatus();
//原型被人改变了
myQuo2.gstatus();

原型链模式是将方法添加到原型上面,模块模式是使用闭包将模拟class的格式;

/*模块模式*/
var obj = function (){
this.name = "wch";
function getName(){return name;};
function setName(n){name = n;};
return {getName:getName,setName:setName}
};

/*原型链模式*/
var Quo = function (str){
this.status = str;
}
Quo.prototype.getStatus = function (){
return this.status;
};
var myQuo = new Quo("confused");
alert(myQuo.getStatus());