Javascript 更改定义方式时的原型异常结果
在尝试测试原型功能时,我得到了一个奇怪的结果: 这是我的第一个测试:Javascript 更改定义方式时的原型异常结果,javascript,prototype,Javascript,Prototype,在尝试测试原型功能时,我得到了一个奇怪的结果: 这是我的第一个测试: <script> function Hello() { } var a = new Hello(); Hello.prototype.name = "Fred"; alert(a.name); </script> 函数Hello(){ } var a=newhello(); Hello.prototype.name=“Fred”; 警报(a.名称); 还有,这是第二个: <script&g
<script>
function Hello() {
}
var a = new Hello();
Hello.prototype.name = "Fred";
alert(a.name);
</script>
函数Hello(){
}
var a=newhello();
Hello.prototype.name=“Fred”;
警报(a.名称);
还有,这是第二个:
<script>
function Hello() {
}
var a = new Hello();
Hello.prototype = {
name : "Fred",
}
alert(a.name);
</script>
函数Hello(){
}
var a=newhello();
Hello.prototype={
姓名:“弗雷德”,
}
警报(a.名称);
我不明白为什么第一个会返回带有“Fred”的警报,而第二个是“undefined”,尽管它们的意思是相同的?
你能帮我吗?
谢谢。这两段代码实际上并不相等
在第一个脚本中,您只覆盖了
Hello.prototype.name
,而在第二个脚本中,您覆盖了Hello.prototype的全部内容,您的订单混乱不堪。在使用new
操作符之前,需要将对象指定给原型:
function Hello() {
}
Hello.prototype = {
name : "Fred",
}
var a = new Hello();
alert(a.name);
在JavaScript中定义函数时,解释器会在函数上提供一个特殊的原型
属性,该属性指向一个对象,以防您将该函数用作构造函数。使用构造函数创建新对象时,[[Prototype]]
内部属性指向此对象
当您用一个新属性替换prototype
属性时,您正在替换该引用,如果您在实例化一个对象之后执行此操作,您将发现prototype
对象似乎已过时(该对象的[[prototype]]
指向prototype
的原始对象)
解决
仅在prototype
属性上直接指定新属性
var constructor = function() { };
constructor.prototype.someMethod = function() { };
使用extend type函数用新对象扩展现有的prototype
属性(在本例中,我使用了下划线函数)
确保在构造之后,分配prototype
属性是程序的下一步(通常不推荐)
哇,你是我的英雄亚历克斯。极其简单,超级容易理解。非常感谢!
var constructor = function() { };
_.extend(constructor.prototype, { someMethod: function() { } });
var constructor = function() { };
constructor.prototype = { someMethod: function() { } };