JavaScript 深入理解对象创建方式
???? 在JS中,为了改进语言熟悉程度,也引入了“构造函数”这样的机制,但是在JS中构造函数本身也是函数,只是可以用来创建对象。在JS中创建对象,也需要用到new操作符,它的实际过程是这样的:
????
??
?
?
?? 上面图是我自己手绘的,呵呵,请诸兄不要笑话。
?? 要检测对象和原型之间的关系的方法是:
??
function Person(){}Person.prototype={ constructor:Person, name:"ted", age:11, sayName:function(){ alert(this.name); }, friends:["a","b"]}var ted=new Person();var marry=new Person();alert(ted.friends==marry.friends);//输出trueted.friends.push("c");alert(ted.friends);//输出a b calert(marry.friends);//也输出a b c?
??? 如果你的本意就是想设计的让所有对象共享相同属性,那么上述方法没有任何问题,并且在某种程度上还提高了内聚性。但是实例一般有属于自己的单独的属性的,这也是为什么会很少单独只使用原型模式的问题了。
?
1 楼 fantaxy025025 2011-12-22 伙计,你的这个说法猜测的好像有问题~
1:创建一个对象(这一过程完全在new操作符之前)
2:将构造函数的作用域赋给该对象(因此this也就指向了该对象)
3:执行构造函数(创建属性和方法)
4:返回新对象 //---->>这一步猜测的有问题<<----
例如:
function f(){
this.a = 100;
return [1,2,3];
}
x = new f();//你打出来试试看吧~
2 楼 bestchenwu 2011-12-23 fantaxy025025 写道伙计,你的这个说法猜测的好像有问题~
1:创建一个对象(这一过程完全在new操作符之前)
2:将构造函数的作用域赋给该对象(因此this也就指向了该对象)
3:执行构造函数(创建属性和方法)
4:返回新对象 //---->>这一步猜测的有问题<<----
例如:
function f(){
this.a = 100;
return [1,2,3];
}
x = new f();//你打出来试试看吧~
这是两码事吧?你在构造函数的结尾返回一个数组对象,如果是JAVA,你可以在构造函数的末尾返回一个其他类型的对象吗?