obj.prototype = {
initialize:function(){
alert('test');
}
}
这个是替换了
function() {
return function() {
this.initialize.apply(this, arguments);
}
}
的默认的prototype属性实际上就是Object的prototype属性和方法问题
initialize:function(){
alert('test');
}
}
这个是替换了
function() {
return function() {
this.initialize.apply(this, arguments);
}
}
的默认的prototype属性实际上就是Object的prototype属性和方法问题
解决方案 »
- js中关于作用域的问题
- window.open()函数有点不太懂
- 怎么在html里面调用外部的表格,动态更新?
- javascript获得另一个网页的链接数
- 关于浮动QQ客服的问题,望各位高手有空帮小弟看一下 是IE的兼容问题
- JS返回父页面刷新!急~~
- onclick="JavaScript:this.disabled=true" 在netscape 下应该怎么写? ----
- 一个关于横向打印的问题,望高手指点!
- 怎么打开的窗口是没有标题栏,象http://www.superdesign.com.cn/
- 这种JS是用什么方式加密的?
- 二维数组的传递问题
- 我用JAVASCRIPT来获取远程的页面,获取到的是乱码?
你可以通过去掉()试验一下
即:
var obj = new obj;
依然提示test在js中 var obj= new Object();和 var obj = new Object;是等同的
就是说obj这个有一个prototype的链,链中的第一个对象是create而create本身也有prototype, 这个prototype是Object默认的prototype,Object.prototype的prototype是null,至此这条prototype链结束。
当一个取值操作发生时,obj的整个prototype链就开始工作
就是说obj这个有一个prototype的链,链中的第一个对象是create而create本身也有prototype, 这个prototype是Object默认的prototype,Object.prototype的prototype是null,至此这条prototype链结束。
当一个取值操作发生时,obj的整个prototype链就开始工作
this.b.apply(this, arguments);
}
a.prototype = {
b:function(){
alert('test');
}
}
var c = new a();简化一下是这样的吧
我最不明白的地方是:this.initialize//已引用obj对象的function,
//但为什么在this.initialize上调用 apply方法,也就是调用
//function(){
// alert('test');
//}的apply,而方法只是修改上下文对象而已,为什么会导致运行这个
//这个函数
这个执行以后就变成了
var obj = function(){
this.b.apply(this, arguments);
};
各位 老大都把焦点放在prototype上了, 这点我已经明白了
但为什么会导致函数运行
<head>
<script type="text/javascript">
var ojb1 = new Object();
var Class = {
create: function() {
return function() {
this.initialize.toString();//这样运行时就不会有alert出现
//this.initialize()//调用 方法,有alert出现
this.initialize.apply(this, arguments);//这样运行也有alert出现
//为什么第一个不会出现alert是,而第三个出现,第二个出现很容易理解
}
}
}
var obj = Class.create();
obj.prototype = {
initialize:function(){
alert('test');
}
}
//obj指向函数这个函数--> function() {
// this.initialize.apply(this, arguments);
//}
var obj = new obj();//obj是个函数引用,()就运行了
//上面这句句创建了一个obj对象,自然就有prototype属性(对象)里的initialize属性,且这个属性指身一//函数,在initialize所引的函数上调用apply方法
//而aplly只是修改函数上下文对象,为什么会导致initialize引用的函数运行
//或者说为什么页面一打开就会运行initialize:function(){...}函数,即alert('test');
</script>
</head>
<body>
</body>
</html>
//为什么第一个不会出现alert是,而第三个出现,第二个出现很容易理解
第二运行了只是等于function(){
this.b.apply(this, arguments);
};
这个
最后得到的形式是var obj = function(){
this.b.apply(this, arguments);
};
obj.prototype = {
initialize:function(){
alert('test');
}
}
var obj = new obj();这样你明白了吗?
不明白,你把它转成:var obj = function(){
this.initialize.apply(this,new Array('你好','来吧'));
};
obj.prototype = {
initialize:function(name,age){
alert(name);
}
}
var obj = new obj();
obj.initialize.apply(this,new Array('你好','来吧'));吗?
apply方法吧
function cat(name,age){
alert(name+ age);
}
cat.apply(null,new Array('你好','来吧'));这个例子明白了吧
在对象的方法调用apply会导致方法运行:如上面的例子,调用cat函数的apply方法,导致了函数运行
但这里为什么alert出了 你好来吧,就这点不明白
非常谢谢chinmo
alert(name+ age);
}
cat.apply(null,new Array('你好','来吧'));这个与function cat(name,age){
alert(name+ age);
}
cat.call(null,name,age);
是同一个道理的你去看看这2个的基础吧