Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 原型继承理解_Javascript - Fatal编程技术网

Javascript 原型继承理解

Javascript 原型继承理解,javascript,Javascript,我有以下代码: var Class = function(){ // function constructor this.className = 'Class'; } Class.prototype.method = function(){ // open method alert('method of ' + this.className); } var ClassSub = function(){ // function constructor of sub class this.clas

我有以下代码:

var Class = function(){ // function constructor
this.className = 'Class';
}
Class.prototype.method = function(){ // open method
alert('method of ' + this.className);
}

var ClassSub = function(){ // function constructor of sub class
this.className = 'ClassSub';
}
ClassSub.prototype = new Class(); 

var objSub = new ClassSub(); 
objSub.method(); 
我有一个问题:
Class.prototype.method=function(){//openmethod

当我们这样写的时候,我们说我们类的原型将有这个方法。 所以他的子类将使用这个方法。 但我不明白的是 为什么我们不能写

Class.method = function()

如注释中所述,
Class.method
为变量
Class
创建属性,而不是
Class
的实例

var Class = function () { /* some code */ }
Class.method = function () { }
console.log(Class.method); // function () { }
console.log(new Class().method); // undefined

Class.prototype.method = function () { }
console.log(new Class().method); // function () { }

如注释中所述,
Class.method
为变量
Class
创建属性,而不是
Class
的实例

var Class = function () { /* some code */ }
Class.method = function () { }
console.log(Class.method); // function () { }
console.log(new Class().method); // undefined

Class.prototype.method = function () { }
console.log(new Class().method); // function () { }

Class.method=function(){};

这只会在构造函数
上添加
方法
属性。函数是对象,可以像任何其他对象一样保存数据。但是,不将
方法
函数添加到
实例的原因很简单:这不是在中实现原型继承的方式JavaScript

您应该阅读并理解原型链是如何设置的,以及为什么向构造函数添加成员不会影响使用此构造函数创建的实例

我认为还值得一提的是,
ClassSub.prototype=newclass();
不是设置原型链的有效方法,因为它将运行
构造函数的代码

在现代浏览器中,您可以简单地使用
对象。创建
并为旧浏览器提供垫片


ClassSub.prototype=Object.create(Class.prototype);
Class.method=function(){};

这只会在构造函数
上添加
方法
属性。函数是对象,可以像任何其他对象一样保存数据。但是,不将
方法
函数添加到
实例的原因很简单:这不是在中实现原型继承的方式JavaScript

您应该阅读并理解原型链是如何设置的,以及为什么向构造函数添加成员不会影响使用此构造函数创建的实例

我认为还值得一提的是,
ClassSub.prototype=newclass();
不是设置原型链的有效方法,因为它将运行
构造函数的代码

在现代浏览器中,您可以简单地使用
对象。创建
并为旧浏览器提供垫片


ClassSub.prototype=Object.create(Class.prototype);

语法将类视为普通函数对象,而不是类对象实例的构造函数。@Jeffman-请讲清楚。你指的是什么(指的是)?你的问题是什么?你是说使用
classname.prototype.methodname
的原因是什么?为什么我们不使用
classname.methodname
?语法将类视为普通函数对象,而不是类对象实例的构造函数。@Jeffman-请讲清楚。你指的是什么(指的是)?你的问题是什么?你是说使用
classname.prototype.methodname
的原因是什么?为什么我们不使用
classname.methodname
?我已经读过了,谢谢你…我想我需要一些时间来理解它…)我已经读过了,谢谢你…我想我需要一些时间来理解它…)