原型函数 JavaScript
Prototype function JavaScript
如果你对一个对象使用继承没有兴趣,那么在JavaScript中对一个对象使用Prototype函数有什么意义吗?
换句话说,Prototype 函数除了实现继承机制之外还有什么目的吗?
。原型函数除了实现继承机制之外,是否有其他目的?
我假设你的意思是Function
对象的prototype
属性。(JavaScript中没有"原型函数"。
这取决于你所说的"继承"是什么意思。Function
实例上的 prototype
属性的目的是指定将分配为使用该函数作为构造函数创建的对象的原型的对象,例如:
var f = new Foo(); // Assigns `Foo.prototype` as `f`'s prototype
这样,f
可以访问该原型定义的属性。如果这就是你所说的继承,那么是的,这是函数上prototype
属性的唯一目的。
请注意,现在我们有 ECMAScript5,如果你愿意,可以使用新的Object.create
来分配原型而不使用构造函数:
var f = Object.create(somePrototype); // Assigns `somePrototype` as `f`'s prototype
以下是两者的更具体示例:
使用构造函数:
function Foo(name) {
this.name = name;
}
Foo.prototype.hey = function() {
console.log("Hi, I'm " + this.name);
};
var f = new Foo("Fred"); // Assigns `Foo.prototype` as `f`'s prototype
f.hey(); // Shows "Hi, I'm Fred" because `f` gets `hey` from its prototype
使用Object.create
:
var fproto = {
hey: function() {
console.log("Hi, I'm " + this.name);
}
};
var f = Object.create(fproto); // Assigns `fproto` as `f`'s prototype
f.name = "Fred";
f.hey(); // Shows "Hi, I'm Fred" because `f` gets `hey` from its prototype
因此,如果您只想使用 Object.create
,并且只使用支持 ES5 的引擎,那么如果您愿意,您永远无法使用Function#prototype
。
与经典继承(如Java)不同,它允许您访问父级的属性。
例如:
var criminal = {
'name': 'John',
'crime': 'Murder'
}
criminal.name; // 'John'
var criminal2 = Object.create(criminal);
criminal2.prison = 'Famous Prison';
criminal2.name; // 'John'
criminal2.name = 'Tom';
criminal2.name; // 'Tom'
如果这有任何意义。不过,我对Java的比较可能是错误的。
此外,你认为JavaScript是另一种语言。事实并非如此。它是JavaScript,它没有类或继承,它是一种原型语言。
你应该看看 JavaScript: The Good Parts by Crockford。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在全局范围中查找JavaScript函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何调用这个匿名 JavaScript 函数
- 通过Ajax将JavaScript函数传递给PHP文件
- 在javascript函数中设置全局变量
- 如何在执行此特定onclick事件时执行JavaScript函数
- 使用javascript函数在页面初始化后加载jquery
- javascript函数同步
- 如何将一个JavaScript函数回调为多个函数
- 在javascript函数中使用php变量
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 将JavaScript函数与HTML分离
- 组合两个javascript函数
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- javascript函数内部的代码用逗号而不是分号分隔
- href属性内的javascript函数
- 使用html表单中的参数调用JavaScript函数
- 分析Javascript函数中的多个对象
- javascript函数的:和=之间的区别