Lij*_*raj 5 javascript prototypejs
好吧,我很想了解javascript中的原型并发现了很多文章,但是我无法理解为什么我不能在javascript中的Object常量中使用原型。众所周知,一切都是从Object继承的,所以在这种情况下
function Dog() {
}
Dog.prototype = new Animal;
Dog.prototype.bark = function() {
console.log("Woof! My name is " + this.name);
};
Run Code Online (Sandbox Code Playgroud)
如果我能够在函数中使用原型,为什么我不能在对象文字中使用原型,例如以下示例
var obj = {
firstname: 'foo',
lastname:'bar'
}
// this throws an error
obj.prototype.getMethod = function () {
console.log('this is a function');
}
Run Code Online (Sandbox Code Playgroud)
我经历了所有这些问题,但它确实无法回答为什么无法在JavaScript的对象文字中使用原型的原因。以下是一些参考
首先,.prototype属性属于函数对象。您无法从普通对象实例访问它。基本上,在构造实例.prototype的内部时将使用与构造函数相关的属性[[prototype]]。这里你有一个实例,如果你想把函数添加到它的原型链中,那么你必须修改它
var obj = { firstname: 'foo', lastname:'bar' };
var pro = Object.getPrototypeOf(obj);
pro.getMethod = function () {
console.log('this is a function');
};
Run Code Online (Sandbox Code Playgroud)
正如@bergi 指出的那样,getMethod如果我们遵循上述方法,则存在将加到所有实例中的风险。但为了避免这种情况,你也可以这样做,
var obj = { firstname: 'foo', lastname:'bar' };
Object.setPrototypeOf(obj, Object.create({getMethod : function(){
console.log("Hello");
}}));
console.log(obj.getMethod()); //"Hello"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |