好的,我正试着把我的头放在Javascript OOP上,它是原型、原型指针和构造函数的完美组合。我正在阅读MDN简介(),它有以下示例:
// Define the Person constructor
var Person = function(firstName) {
this.firstName = firstName;
};
// Add a couple of methods to Person.prototype
Person.prototype.walk = function(){
console.log("I am walking!");
};
P
我不明白以下行为:
var Foo = function () {};
var Bar = function () {};
Foo.prototype = Bar;
var foo = new Foo();
console.log(foo.prototype === Bar.prototype); // true, but why?
我在中找不到任何关于使用构造函数创建的对象上prototype属性的默认值的信息。(我确实找到了,其中提到,对于函数,prototype属性默认为new Object(),但没有提到使用构造函数创建的对象。)
所以,我的问题是双重的:
使用构造函数创建的对象的pr
当我在JS中进行继承时,我会在派生类中找到额外的属性,这些属性是基类属性的重复;我猜不出如何强制派生类使用基类的属性。我需要稍微朝正确的方向推进,这样我就可以修复我的继承模型,或者改变我使用原型继承的方式。
假设我从这个典型的继承函数开始:
Function.prototype.inheritsFrom = function( parentClassOrObject ){
if ( parentClassOrObject.constructor == Function ) {
this.prototype = new parentClassOrObject; //Normal In
我们可以覆盖函数的原型,但不能重写类的原型? function A() {
}
class B {
}
let _APrototype = A.prototype;
let _BPrototype = B.prototype;
A.prototype = function () {
};
B.prototype = function () {
};
console.log(_APrototype == A.prototype); //false
console.log(_BProtot
我使用了以下代码:
function Tmp(){}
var tmp = new Tmp()
Tmp.prototype.f1 = function(){console.log("f1");}
tmp.f1() -> output: f1
Tmp.prototype.f1 = function(){console.log("f1 update");}
tmp.f1() -> output: f1 update
//this is confusing
Tmp.prototype = null;
tmp.f1() -> output stil
我有一个继承自另一个对象的对象,如下所示:
var a = function ()
{
}
a.prototype.foo = function ()
{
bar();
}
var b = function ()
{
a.call(this)
}
b.prototype = Object.create(a.prototype);
b.prototype.constructor = b;
我希望有一个b方法,它也被命名为"foo“,并以相同的名称扩展了一个函数。
b.prototype.foo = function ()
{
baz();
// Whe
只是在玩javascript继承时遇到了一点混乱。
function A() {}
function B() {}
B.prototype = new A();
function C() {}
C.prototype = new B();
var x = new C();
x.construction // -> returns A in chrome console.
我原以为x.constructor是C(甚至可能是B),但不是一直到A(为什么停在A,然后不显示对象)。
我有代码:
var TestError = function () {
var that = Error.call(this);
return that;
};
TestError.prototype = Object.create(Error.prototype);
TestError.prototype.why = function(){alert("NOT WORKING")}
var err = new TestError();
err.why();//not working :( TypeError: err.why is not a function
但不工作:(
我们可以使用Object.prototype.toString.call(foo)来检测对象类(foo的类型),它工作得很好。
但是为什么Object.toString.call({})要抛出TypeError: Function.prototype.toString is not generic
Object.toString不是从Object.prototype继承的吗