我用OOP语言编程已超过10年,但我现在正在学习JavaScript,这是我第一次遇到基于原型的继承.通过学习优秀的代码,我倾向于学得最快.什么是正确使用原型继承的JavaScript应用程序(或库)的精心编写的示例?您能否(简要地)描述原型继承的使用方式/原因,我知道从哪里开始阅读?
我是Javascript的新手,我在我阅读的代码中看到了很多导出和原型的用法.它们主要用于什么以及它们如何工作?
//from express
var Server = exports = module.exports = function HTTPSServer(options, middleware){
connect.HTTPSServer.call(this, options, []);
this.init(middleware);
};
Server.prototype.__proto__ = connect.HTTPSServer.prototype;
Run Code Online (Sandbox Code Playgroud) 我对JavaScript原型概念的概念很新.
考虑以下代码:
var x = function func(){
}
x.prototype.log = function() {
console.log("1");
}
var b = new x();
Run Code Online (Sandbox Code Playgroud)
据我了解,b.log()应该返回1,因为x它是原型.但为什么财产b.prototype未定义?
是不是b.prototype应该返回对x函数的引用?
什么是prototype财产,为什么有必要?到目前为止,我已经了解到这提供了公共访问prototype对象的更多内在和私有; 那是对的吗?
另外,以下陈述之间有什么区别?
MyConstructor.age = 30;
MyConstructor.prototype.age = 30;
Run Code Online (Sandbox Code Playgroud)
简而言之,我需要更好地理解关键字prototype.
谢谢
所以这就是所谓的模块模式,用于创建私有成员的单身人士:
var foo = (function () {
var _foo = 'private!';
return {
foo: function () { console.log(_foo); },
bar: 'public!'
}
})();
Run Code Online (Sandbox Code Playgroud)
还有我自己发现的这种方法,但没有看到任何关于:
var foo = new function () {
var _foo = 'private!';
this.bar = 'public!';
this.foo = function () { console.log(_foo); };
}
Run Code Online (Sandbox Code Playgroud)
我认为必须有一个理由为什么没有人写这篇文章,而有大量关于模块模式的文章.这种模式有什么缺点吗?或许速度或浏览器兼容性?
我尝试扩展JavaScript Math.但有一件事让我感到惊讶.
当我试图延长它时 prototype
Math.prototype.randomBetween = function (a, b) {
return Math.floor(Math.random() * (b - a + 1) + a);
};
Run Code Online (Sandbox Code Playgroud)
在控制台中我有错误'无法设置属性'randomBetween'的'undefined'...
但是如果我把这个功能赋予了 Math.__proto__
Math.__proto__.randomBetween = function (a, b) {
return Math.floor(Math.random() * (b - a + 1) + a);
};
Run Code Online (Sandbox Code Playgroud)
一切正常.
谁能解释一下为什么它以这种方式工作?我感谢任何帮助.
据我所知,在JavaScript中,每个对象都有一个prototype,它暴露了一些默认属性.我有以下代码,我试图通过设置两个对象的Year属性prototype.但这两个电话都失败了.
toLocalString()如果我没有访问权限,如何覆盖任何对象prototype?请注意,以下代码用于测试prototype属性,但我的目的是覆盖该toLocalString()方法.
var car = {
Make: 'Nissan',
Model: 'Altima'
};
car.Year = 2014;
alert(car.Year);
alert(car.prototype); // returns undefined
car.prototype.Year = 2014; // Javascript error
// --------------
function Car() {
this.Make = 'NISSAN';
this.Model = 'Atlanta';
}
var v = new Car();
v.prototype.Year = 2014; // JavaScript error
alert(v.prototype);
Run Code Online (Sandbox Code Playgroud) 我想声明对象模式(可以使用默认值实例化变量,具有验证规则等),就像它可以在mongoose中完成,但在客户端.
没有找到任何提供它的图书馆.我错过了什么吗?
我想知道jQuery中的原型意味着什么?我通常会找到关于"Prototype"的信息 - 框架 - 但是这里是jQuery里面的"原型"......?你能告诉我什么时候最好用吗?
另外,你能告诉我:为什么我们在jQuery插件中使用"普通javascript"代码而不是jquery代码,就像在这个例子中一样?这是一个快速问题吗?
这是我的例子:(一个twitter的插件)
谢谢你的回答!
$.each(data, function(i, item) {
holder.append("<p>"+item.text.makeLinks()+"</p>");
});
//...further in the code
String.prototype.makeLinks = function() {
return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(str) {
return str.link(str);
});
};
Run Code Online (Sandbox Code Playgroud) 你们是如何用JavaScript制作"课程"的?
我在用:
function classFoo()
{
var classLevelVariable = 0;
this.classFunction = function()
{
alert("The classFunction has been called.");
classFunction2(); //Crash. classFunction2 is "undefined."
}
this.classFunction2 = function()
{
alert("classFunction2 called.");
}
}
Run Code Online (Sandbox Code Playgroud)
我从来没有能够让施工人员工作.试着
this.New = function(arguments)
Run Code Online (Sandbox Code Playgroud)
哪个工作过一次,但不是在第二个班级.所以,我现在已经完全放弃了这些,使用我自己的"初始化"函数作为构造函数.
它工作一次但不是两次的奇怪使我觉得两个类之间的印刷错误...但我认为在19年的编码中,可能不是它.
我正在使用Chrome的调试器,除了第二个函数被调用时,我没有收到任何错误.