我更喜欢原型编程方式,并且一直试图在javascript中理解它。
我在好的部分中看到了这段代码:
function beget(o){
function F(){
F.prototype = o;
};
return new F();
};
我根本没有得到这个哈哈。如果您只需要将原型设置为过去的对象,那么您不能这样做:
var parent = {
num = 66;
};
var child = {
prototype: parent
};
这似乎不起作用,因为child.num以undefined的形式返回。你如何描述javascript原型编程以及你的方法是什么? 谢谢你们
答案 0 :(得分:2)
我个人认为最惯用的方法如下:
function Parent() {
this.value = 2;
}
function Child() {
}
Child.prototype = new Parent();
var c = new Child();
alert(c instanceof Child); // true
alert(c instanceof Parent); // true
alert(c.value); // 2
答案 1 :(得分:1)
.prototype
属性对JavaScript有特殊意义,但仅适用于函数,这就是您的代码不起作用的原因。
使用“原型继承”,您不会从基类继承。相反,您从一些对象开始,并使用第一个作为原型创建一个新对象。然后,您将属性和方法添加到新创建的对象中。
我不确定你的意思是“你的方法是什么?”你的意思是编程方法,还是类似的东西?
更新: 你的问题非常广泛,我认为我不能在这里用简短的答案做正义。你可能想看看下面的SO问题,它对JS原型进行了很好的讨论,以及一些链接其他人发现对此主题有帮助的东西。
答案 2 :(得分:1)
您只能将prototype
添加到功能对象中。通过 new
调用时,它会将其用作原型。
顺便说一下,你引用的函数是新版ECMAScript的一部分Object.create
(附加propertiesObject
参数)。
让我这样说吧:{object}
是单身人士。 function() object
是构造函数,也就是说,当使用 new
调用时,会创建实例(通过执行函数的主体,并使用构造函数的原型)。当然原型也可以是一个函数对象,并且有自己的原型等。 Specialization 和 Generalization 意味着在原型链中走来走去。
答案 3 :(得分:1)
第二个示例不起作用,因为您只是设置对象的属性。 你想要做的是设置构造函数的prototype属性,然后从该函数创建一个对象。
var parent = {
num : 666
};
function ChildConstructor(){
console.log(this.num);
}
ChildConstructor.prototype = parent;
var child = new ChildConstructor();
如果没有专有方法,就无法在对象上设置或更改原型。
答案 4 :(得分:0)
var parent = {
num : 66
};
var child = {
__proto__: parent
};