关于面向对象js的几个疑惑,问了很多人都没有很好的解释 js 是解释型语言2个不可执行的 this.Show(); 语句在执行时,show方法还未定义 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <script> // 三个功能相同的类,是工作中遇到的问题的总结 // 标注不可执行的那些代码是为什么? // 请给我一个相对底层的讲解 谢谢 // obj.Show()可执行 var TestClass = function(name) { this.name = name; this.Show();//可执行 }TestClass.prototype = { //这里重新设置了TestClass的原型/*当执行new TestClass时。会调用Object构造来把TestClass实例化然后把TestClass原型下所有的属性的引用copy给TestClass这个操作在执行TestClass这个构造函数前已经执行完毕比如var wc = new TestClasswc就具有了Show这个方法,并且指向TestClass.prototype.Show这时,你从构造里就可以用this.Show来访问到这个方法如果你修改了this.Show比如this.Show = function () {};这时wc.Show这个方法的引用就会指向你新修改的那个函数上即function () {};这样它就和TestClass.prototype.Show没有关联了。若你还想通过wc.Show来访问TestClass.prototype.Show把你新加的wc.Show方法删除掉就可以了delete wc.Show这样在调用wc.Show就又是TestClass.prototype.Show了。至于下面的操作,是从构造里来改变原型。虽然这样写也会把wc所继承。不过,它的执行顺序就不同了(初始化的顺序即调用时,还未初始化)第三种的话。它直接改变了原型的引用这样的话。只能在下次new TestClass时,才会生效*/ Show:function() { alert(this.name); } }/* // obj.Show()可执行 var TestClass = function(name) { this.name = name; this.Show(); // 不可执行 if(typeof(TestClass._initialized) == "undefined") { TestClass.prototype.Show = function() { alert(this.name); } } } // obj.Show()不可执行 var TestClass = function(name) { this.name = name; this.Show();// 不可执行 if(typeof(TestClass._initialized) == "undefined") { TestClass.prototype = { Show:function() { alert(this.name); } } } } */ var obj = new TestClass('MyName'); obj.Show(); </script> 谢谢 wilowind 请问第三个类的实例obj.Show()为什么也没法执行. 至于下面的操作,是从构造里来改变原型。虽然这样写也会把wc所继承。打错个字至于下面的操作,是从构造里来改变原型。虽然这样写也会被wc所继承。 谢谢 muxrwc 第三个类 在var obj = new TestClass()之后obj.Show()也会失败 请问这是为什么 第三种的话。它直接改变了原型的引用这样的话。只能在下次new TestClass时,才会生效可以抽象理解成第三种:var a = {}; //a就是TestClassvar b = a; //b就是wca = [];这时b不会变化对吧这个就和你第3种是一个情况然而第二种:var a = {};var b = a;a.c = []; 明白了 非常感谢 muxrwc 结贴 jquery :contains 的问题 仿MSN弹出框 微缩图片后 再实现链接查看到原图片 用JS+XML+HTML做的随机测试生成,可是试题显示不出来,实在找不到错误,憋死我了 这个JS裁减的效果难道就不能手动填写数值? js 的一些语法问题,求助 !!!如何用script取得页面里img图片的最后修改时间??? jquery没有反应了 如何可以将一个页面保存到一个txt文件中呢? 关于无边窗口,希望大家一起改…… 高分求一调用xslt文档的问题 javaScript
<script>
// 三个功能相同的类,是工作中遇到的问题的总结
// 标注不可执行的那些代码是为什么?
// 请给我一个相对底层的讲解 谢谢
// obj.Show()可执行
var TestClass = function(name)
{
this.name = name;
this.Show();//可执行
}
TestClass.prototype = { //这里重新设置了TestClass的原型
/*
当执行new TestClass时。
会调用Object构造来把TestClass实例化
然后把TestClass原型下所有的属性的引用copy给TestClass
这个操作在执行TestClass这个构造函数前已经执行完毕
比如
var wc = new TestClass
wc就具有了Show这个方法,并且指向TestClass.prototype.Show
这时,你从构造里就可以用this.Show来访问到这个方法
如果你修改了
this.Show
比如
this.Show = function () {};
这时
wc.Show这个方法的引用就会指向你新修改的那个函数上即function () {};
这样它就和TestClass.prototype.Show没有关联了。
若你还想通过wc.Show来访问TestClass.prototype.Show
把你新加的wc.Show方法删除掉就可以了
delete wc.Show
这样在调用
wc.Show就又是TestClass.prototype.Show了。
至于下面的操作,是从构造里来改变原型。虽然这样写也会把wc所继承。
不过,它的执行顺序就不同了(初始化的顺序即调用时,还未初始化)
第三种的话。
它直接改变了原型的引用
这样的话。
只能在下次new TestClass时,才会生效
*/
Show:function()
{
alert(this.name);
}
}
/*
// obj.Show()可执行
var TestClass = function(name)
{
this.name = name;
this.Show(); // 不可执行
if(typeof(TestClass._initialized) == "undefined")
{
TestClass.prototype.Show = function()
{
alert(this.name);
}
}
} // obj.Show()不可执行
var TestClass = function(name)
{
this.name = name;
this.Show();// 不可执行
if(typeof(TestClass._initialized) == "undefined")
{
TestClass.prototype =
{
Show:function()
{
alert(this.name);
}
}
}
}
*/ var obj = new TestClass('MyName');
obj.Show(); </script>
谢谢 wilowind 请问第三个类的实例obj.Show()为什么也没法执行.
它直接改变了原型的引用
这样的话。
只能在下次new TestClass时,才会生效可以抽象理解成
第三种:
var a = {}; //a就是TestClass
var b = a; //b就是wc
a = [];
这时b不会变化对吧
这个就和你第3种是一个情况然而第二种:var a = {};
var b = a;
a.c = [];