我知道这类问题已被提出并被回答了一百万次,但我仍然不明白这一点。
JavaScript中的所有内容都是一个对象。存在一个JavaScript运行时搜索方法和属性的原型链。这两件事很清楚。我(我想)也明白new statement does是什么。也许问题是我不明白Object.create
的作用。我一直在使用以下JavaScript设计模式:
SuperClass = function(){
this.superprop = 'some super property';
};
SubClass = function(){
this.subprop = 'some (not so) super property';
};
SuperClass.prototype.someSuperMethod = function(){console.log("I'm super.")};
SubClass.prototype = Object.create(SuperClass.prototype);
SubClass.prototype.constructor = SubClass;
var instance = new SubClass();
instance.someSuperMethod(); // Great! That's super!
但是,我知道为什么我不能写:
SubClass = Object.create(SuperClass);
SubClass = SuperClass;
SubClass = new SuperClass;
SubClass.prototype = SuperClass.prototype;
SubClass = new SuperClass();
SubClass.prototype = SuperClass;
(或上述任何组合)。简而言之,我想我不知道函数的.prototype属性是什么,或者为什么我需要Object.create这个原型如果我希望SubClass
继承SupClass
的所有内容。 / p>
我也不了解SuperClass.prototype.constructor
的含义。这个对象与SuperClass
的不同之处是什么?
我也不明白为什么我需要写new SubClass()
而不是new Subclass
。有什么区别?
答案 0 :(得分:0)
好吧,我是这个问题的OP。但是,我将尝试对我的问题形成一个全面的答案(作为满意的全面答案)。
首先要做的事:JavaScript中的大部分内容都是一个对象。什么是对象? object is任何具有与之关联的方法和属性的东西。你可能会问:“好吧,字符串是一个对象吗?数字5是一个对象吗?”。这是一个有趣的问题。严格地说,没有。这些对JavaScript来说是如此基础,因为它们被称为基元。只有6 primitives in JavaScript:字符串,数字,布尔值,空值,未定义和符号(ECMAScript 6中的符号是新的,这是JavaScript所基于的最新标准 - 正式发布:2015年6月17日)。
对象的主要组件是基元。您可以让函数返回字符串或添加数字。通用对象可以是字符串或数字的容器:
var myGenericObject = {var1: "string 1",
var2: 42,
var3: function(){
console.log("do something.")
}
};
JavaScript中的所有对象都是Object类的子类,甚至是函数。不要混淆:虽然Function类是fundamental object,但函数仍然来自Object class,我想这使得Object类成为JavaScript中最基本的对象(这可能就是它被称为Object的原因) )。但是,Object类实际上是从null原语下降的(不要担心;这就是它结束的地方)。我现在侧面解决的概念称为原型继承,它是JavaScript的核心区别特征。
但是,JavaScript非常聪明。当您尝试访问将存在的方法时
因此,var testString = "hello"
with是一个对象
首先,根据ECMAScript 5的new
运算符
(稍等一下。我只是暂时保存我的进度)。