var a = function(){
this.sayFoo = function(){
console.log('foo');
};
}
var b = function(){
console.log(this.prototype); //undefined
this.sayBar = function(){
console.log('bar');
};
}
b.prototype = new a();
var bInst = new b();
bInst.sayFoo();
b
我试图通过使用Chrome控制台来了解原型继承。这是我用来建立原型链的代码:
var Organism = Object.create(null);
undefined
var Animal = Object.create(Organism);
undefined
var Mammal = Object.create(Animal);
undefined
var Dog = Object.create(Mammal);
undefined
var Spot = Object.create(Dog);
undefined
我可以给生物体和哺乳动物增加一些特性:
Mammal.hasHair =
我希望在不调用new的情况下实例化类,方法是使用Object.create (这是为它创建的),但是如何同时定义所有属性?
class Vec2 {
x = 0;
y = 0;
}
a = new Vec2;
b = Object.create(Vec2.prototype);
console.log(a.x, a.y);
console.log(b.x, b.y);
a.x和a.y存在,但b.x和b.y不存在。
关于Bergi意见的申诉:
1
function Vec1() {
this.x = 0;
}
b = Object.create(Vec1.prototype
我找了很多东西,但找不到任何直接的答案。
为什么我们不能访问使用Object.create() new 创建的对象的原型属性/方法,但是我们可以使用new关键字?
让我们考虑构造函数Greeting如下:
function Greeting() {
}
Greeting.prototype.byeBye = function(){
console.log("Have a good day!")
}
现在,我使用Object.create()方法从这个构造函数创建一个对象。
var Stanley = Object.create(Greeting)
console.
所以,我对Javascript非常陌生,我正在尝试在其中学习一些OOP原理。
我遇到了一个问题。所以,我基本上是在为HTML画布创建一个场景图,这意味着我需要一个递归结构。每个节点必须能够包含一个子节点数组。因此,假设我有一个基本节点对象,如下所示:
// Shape class (It is part of the BNBeagle namespace)
Shape: function () {
this.children = [];
},
没问题。
然后,我继续为一个小示例游戏创建自己的子类,它可能是这样的:
function PlayerShip() {
// drawS
我正在做一个使用原型继承的JavaScript项目。我决定使用它的方式如下:
var MySuperClass = function (param) {
this.prop = param;
};
MySuperClass.prototype.myFunc = function () {
console.log(this.prop);
};
var MySubClass = function (param) {
MySuperClass.call(this, param);
};
MySubClass.prototype = new MySuperClass();
M
我一直在与一些在公司中使用JavaScript的专业人士交谈,有人告诉我,使用new或全局对象{}创建对象实例并不是一个好做法,即使我想要一个空对象,比如:
var wrong1 = new Object();
var wrong2 = {};
根据他们和公司的标准,正确的方法是这样创建它:
var correct = Object.create({});
将一个空对象作为一个空对象的原型传递似乎是过度设计的,甚至可能是无目的的。
有人能给我一个答案,为什么这是推荐的,或者如果不是,为什么不呢?(可能是专业人士。还有犯人。)
我想知道是否有一种方法可以判断一个对象是使用Object.create()还是使用new关键字/文字语法创建的。由于使用Object.create()创建的对象不会从prototype属性中提取属性(它们只是复制所有属性),而使用new和文本语法创建的对象只会从prototype属性中获取属性,因此似乎很难判断对象是如何创建的。例如:
function Meat() {};
var beef = new Meat();
var tuna = Object.create(Meat);
console.log(Object.getPrototypeOf(tuna));//=> [Funct
我尝试在嵌套的for循环中运行eval函数。例如,在下面的代码中,要获得item2.length,必须使用eval运行item2x.create()。create是我编写的一个自定义功能。当我在控制台中测试时,它可以工作。我知道有很多与使用eval相关的污名。但在这种情况下请忽略这一点。我只想知道为什么evals不能在嵌套for循环中工作。
当我运行代码时,它抛出一个错误,它无法获得item2x的长度。但是当我在控制台中测试item2x的长度时,它给出了正确的长度。为什么我的代码不能正常运行?看起来嵌套循环是在第一个eval完成之前运行的。请给我建议。
for (var
我有个问题……B是基类,A是派生类...事件虽然A是从B派生的,但A的各种对象都指向B的同一对象。
我知道我已经将B的一个对象赋给了A的原型,以使B成为A的子代。
但是A的不同对象,它们应该有不同的地址空间来保存变量,对吧?你能改正这个错误吗?
function B(){
this.obj = {};
}
function A(){
}
A.prototype = new B();
var a = new A();
var b = new A();
var c = new A();
consol
我一直在跟踪曼努埃尔·泰希拉( Manuel )的Node.js,我偶然发现了这个奇怪的行为,当时我正在浏览事件发射器一章。
作者建议的代码由如下内容组成:
var EventEmitter = require("events").EventEmitter;
var util = require ("util");
var MyClass = function() {};
util.inherits(MyClass, EventEmitter);
var instance = new MyClass();
instance.on("custom"
为什么这里说的是“动物”而不是“猫”?
// create base class Animal
function Animal(animalType) {
this.type = animalType;
this.sayType = function () {
alert(this.type);
};
}
// create derived class Cat
function Cat(myName) {
Animal.call(this, "cat"); // cat calls the Animal base class c
我不理解原型。据我所知,这段代码应该可以工作。我已经使用Object.create创建了一个原型,并在原型中添加了一个方法,但我一直收到错误。那么,如何让这段代码正常工作呢?让我换个说法,如何正确地编写代码?
// base function
function person()
{
this.name;
this.type;
}
//create instance of function
var a = new person();
a.name = 'ha';
console.log(a.name);
//as opposed to creating ins
我试图在静态方法中创建一个类的实例,我使用的是Object.create(this.prototype),但是当我将它记录到控制台时,我的属性items是undefined。
我有一个名为model的类,它是基本的:
export default class model {
protected items: any = {}
public constructor(options: ModelSettings) {
// Do some stuff
// Does not set the property items before it is compiled
}
我想了解在Javascript中原型是如何和为什么有用的。当我认为我知道了发生了什么之后,我发现原型只是一个对象,不能像我想的那样被许多对象“共享”。让我举一个例子来说明:
var SpritePrototype = {
img: null,
pos_x: 0,
pos_y: 0,
draw: function(context2d) {
/*do stuff with the canvas
using "this" to refer to
the object this method i
我有一个在JavaScript中实现的多层次继承,如下所示
function MovingObject(){
}
function Vehicle(){
}
Vehicle.prototype = Object.create(MovingObject);
function Car(){
}
Car.prototype = Object.create(Vehicle);
var c = new Car();
汽车是汽车的孩子,它反过来又是MovingObject的孩子,所以我期望汽车是MovingObject的间接子代。
下面的语句返回真实的指示车是车辆的直接子级
Vehicle.i
搜索了一段时间,以充分了解数组是如何在对象中工作的。我对其他语言很熟悉,但这给我带来了很多困惑。有对象的
var Test = {
TestArray: [],
}
var a = Object.create(Test);
var b = Object.create(Test);
在我的预期中,这应该会创建对象的两个实例,并且有两个不同的数组,但是在其中有一个数组的行为就像一个实例,向数组添加值会影响到这两个实例,有人能解释为什么吗?
我已经阅读了谷歌首页上的每一篇文章和每一个例子,我仍然很难完全理解如何在JavaScript中正确地实现原型继承。我面临的最大挑战是,我看到了许多实现继承的不同方法。
首先,我将从我想要实现的目标开始,如果这是C#:
C#
class Base {
public string UI { get; set; } // Using a string just for simplicity
}
class Book : Base {
public Book(string title) {
this.title = title;
}
private
我为"car“创建一个构造函数,然后创建两个cars,一个使用"new”关键字,另一个使用"Object.create“
function car (name) {
this.name=name
}
let car1 = new car("volvo")
let car2 = Object.create(car.prototype)
car2.name = "hyundai"
BTW:可以像用"Object.prototype“那样立即设置属性吗?(这样我就不用用下一行“car2.name=”现代“了”)
然后,如果